【问题标题】:Can't use Xam.Plugin.Media plugin无法使用 Xam.Plugin.Media 插件
【发布时间】:2018-06-20 16:54:37
【问题描述】:

我有使用 Xamarin Forms 构建的 android 应用程序。为了使用手机的摄像头,我安装了 Xam.Plugin.Media 插件并完全按照this video的说明进行操作。

这是我的代码:

public async void TakePhotoAsAttachment(object sender, EventArgs e)
        {
            await CrossMedia.Current.Initialize();

            if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
            {
                await DisplayAlert("No Camera", ":( No camera available.", "OK");
                return;
            }

            var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                Directory = "Sample",
                Name = "test.jpg"
            });

            if (file == null)
                return;

            await DisplayAlert("File Location", file.Path, "OK");

            image.Source = ImageSource.FromStream(() =>
            {
                var stream = file.GetStream();
                return stream;
            });
        }

但是,在执行此代码时:

        var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
        {
            Directory = "Sample",
            Name = "test.jpg"
        });

我收到此错误:

{Java.Lang.ClassNotFoundException: md55b01af31820394fbfb172542d1258596.MediaPickerActivity ---> Java.Lang.ClassNotFoundException:找不到类 路径上的“md55b01af31820394fbfb172542d1258596.MediaPickerActivity”: DexPathList[[压缩文件 "/data/app/com.companyname.EClinicForDoctor-1/base.apk"],nativeLibraryDirectories=[/data/app/com.companyname.EClinicForDoctor-1/lib/arm, /data/app/com.companyname.EClinicForDoctor-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]] --- 内部异常堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在 :0 处 Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference 类型,Java.Interop.JniMethodInfo 方法,Java.Interop.JniArgumentValue* args) [0x00069] in :0 在 Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x0000e] in :0 在 Android.Runtime.JNIEnv.CallStaticObjectMethod (System.IntPtr jclass, System.IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00017] in :0 在 Android.Runtime.JNIEnv.FindClass (System.String 类名) [0x0003d] 在 :0 在 Android.Runtime.JNIEnv.FindClass (System.Type 类型) [0x00084] in :0 在 Java.Lang.Class.FromType (System.Type 类型) [0x00022] in :0
在 Android.Content.Intent..ctor (Android.Content.Context packageContext,System.Type 类型)[0x00000] in :0 在 Plugin.Media.MediaImplementation.CreateMediaIntent (System.Int32 id, System.String 类型,System.String 动作, Plugin.Media.Abstractions.StoreMediaOptions 选项,System.Boolean 任务)[0x00000] 在 C:\projects\mediaplugin\src\Media.Plugin.Android\MediaImplementation.cs:411 在 Plugin.Media.MediaImplementation.TakeMediaAsync (System.String 类型,System.String 动作, Plugin.Media.Abstractions.StoreMediaOptions 选项)[0x00044] 在 C:\projects\mediaplugin\src\Media.Plugin.Android\MediaImplementation.cs:470 在 Plugin.Media.MediaImplementation+d__17.MoveNext () [0x000ab] 在 C:\projects\mediaplugin\src\Media.Plugin.Android\MediaImplementation.cs:153

--- 从先前抛出异常的位置结束堆栈跟踪--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在 :0 处 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x0003e] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task 任务) [0x00028] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x00008] in :0 在 System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] 在 :0 处 EClinicForDoctor.Pages.VisitsPage+d__17.MoveNext () [0x00175] 在 E:\Doctor Project\Mobile Applications\v1\4\EClinicForDoctor\EClinicForDoctor\EClinicForDoctor\Pages\VisitsPage.xaml.cs:235 --- 托管 Java.Lang.ClassNotFoundException 堆栈跟踪结束 --- java.lang.ClassNotFoundException: md55b01af31820394fbfb172542d1258596.MediaPickerActivity 在 java.lang.Class.classForName(Native Method) 在 java.lang.Class.forName(Class.java:324) 在 md5270abb39e60627f0f200893b490a1ade.ButtonRenderer_ButtonClickListener.n_onClick(Native 方法)在 md5270abb39e60627f0f200893b490a1ade.ButtonRenderer_ButtonClickListener.onClick(ButtonRenderer_ButtonClickListener.java:30) 在 android.view.View.performClick(View.java:5697) 在 android.widget.TextView.performClick(TextView.java:10826) 在 android.view.View$PerformClick.run(View.java:22526) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7225) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 引起:java.lang.ClassNotFoundException:找不到类 路径上的“md55b01af31820394fbfb172542d1258596.MediaPickerActivity”: DexPathList[[压缩文件 "/data/app/com.companyname.EClinicForDoctor-1/base.apk"],nativeLibraryDirectories=[/data/app/com.companyname.EClinicForDoctor-1/lib/arm, /data/app/com.companyname.EClinicForDoctor-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:469) ... 14 更多 抑制:java.lang.ClassNotFoundException: md55b01af31820394fbfb172542d1258596.MediaPickerActivity 在 java.lang.Class.classForName(Native Method) 在 java.lang.BootClassLoader.findClass(ClassLoader.java:781) 在 java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 15 更多 引起:java.lang.NoClassDefFoundError: Class not found using the 引导类加载器;没有可用的堆栈跟踪 }

然后我从github 阅读了插件的说明,它在某种程度上类似于视频的说明,并且发生了同样的错误。如何解决这个问题?

【问题讨论】:

  • 在 iOS 上运行正常吗?
  • 我只在 Android 上运行它。我没有 MAC 电脑。
  • 你在便携版和安卓版都安装了插件吗?也尝试删除每个项目的bin obj文件夹
  • 谢谢兄弟。它在删除 bin 和 obj 文件夹后工作。写下您的评论作为答案,以使其成为现实。但是你能告诉我为什么会这样吗??

标签: c# xamarin.forms


【解决方案1】:

尝试删除项目的 bin obj 文件夹。

您的编译代码和 NuGet 位于 obj、bin 文件夹中。有时,当您添加任何新的 NuGet 时,它不会进入 obj、bin 文件夹。它仅使用较早编译的 NuGet 作为 bin 和 obj 的缓存。删除所有 bin,obj 强制编译器创建新的 bin obj 文件夹并重新编译解决方案。每当您在解决方案中添加任何新的 NuGet 时,最好删除 bin、obj。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2018-04-10
    相关资源
    最近更新 更多