无法使用Xam.Plugin.Media插件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用Xam.Plugin.Media插件相关的知识,希望对你有一定的参考价值。

我有使用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 [[zip file“/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]] ---内部异常堆栈跟踪结束---在<657aa8fea4454dc898a9e5f379c58734>中的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x0000c]:在Java.Interop中为0 .JniEnvironment + StaticMethods.CallStaticObjectMethod(Java.Interop.JniObjectReference类型,Java.Interop.JniMethodInfo方法,Java.Interop.JniArgumentValue * args)[0x00069]位于<54816278eed9488eb28d3597fecd78f8>: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 at Android.Runtime.JNIEnv.FindClass(System.String classname) [0x0003d] in:0:Android.Runtime.JNIEnv.FindClass(System.Type type)[0x00084] in:0 at Java.Lang.Class.FromType(System.Type type)[0x00022] in:0 在Android.Content.Intent..ctor(Android.Content.Context packageContext,System.Type type)[0x00000] in:0 in Plugin.Media.MediaImplementation.CreateMediaIntent(System.Int32 id,System.String type,System.String动作,Plugin.Media.Abstractions.StoreMediaOptions选项,System.Boolean任务)[0x00000]在C: projects mediaplugin src Media.Plugin.Android MediaImplementation.cs:411 in 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

---抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(系统)的<657aa8fea4454dc898a9e5f379c58734>中的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x0000c]中.Threading.Tasks.Task任务)[0x0003e]在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task任务)[0x00028]中的<657aa8fea4454dc898a9e5 .CompilerServices.TaskAwaiter.ValidateEnd(System.Threading.Tasks.Task任务)[0x00008] in <657aa8fea4454dc898a9e5f379c58734>:0 at System.Runtime.CompilerServices.TaskAwaiter`1 [TResult] .GetResult()[0x00000] in <657aa8fea4454dc898a9e5f379c58734>: 0在EClinicForDoctor.Pages.VisitsPage + d _17.MoveNext()[0x00175]在E: Doctor Project Mobile Applications v1 4 EClinicForDoctor EClinicForDoctor EClinicForDoctor Pages VisitsPage.xaml.cs:235 --- End of管理Java.Lan g.ClassNotFoundException堆栈跟踪--- java.lang.ClassNotFoundException:md55b01af31820394fbfb172542d1258596.MediaPickerActivity at java.lang.Class.classForName(Native Method)at java.lang.Class.forName(Class.java:324)at md5270abb39e60627f0f200893b490a1ade.ButtonRenderer_ButtonClickListener.n_onClick (本机方法)at md5270abb39e60627f0f200893b490a1ade.ButtonRenderer_ButtonClickListener.onClick(ButtonRenderer_ButtonClickListener.java:30)在Android.view.TextView.performClick(TextView.java:10826)的android.view.View.performClick(View.java:5697)。在Android.os.Hoo上的android.os.Handler.dispatchMessage(Handler.java:95)的android.os.Handler.handleCallback(Handler.java:739)上查看$ PerformClick.run(View.java:22526) .loop(Looper.java:158)位于android.app.ActivityThread.main(ActivityThread.java:7225)的java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run(ZygoteInit.java:1230)at com.android.internal.os.ZygoteInit.ma in(ZygoteInit.java:1120)引起:java.lang.ClassNotFoundException:路径上没有找到类“md55b01af31820394fbfb172542d1258596.MediaPickerActivity”:DexPathList [[zip file“/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,/在java.lang.ClassLoader.loadClass(ClassLoader)的java.lang.ClassLoader.loadClass(ClassLoader.java:511)的dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)上的vendor / lib,/ system / lib] .java:469)... 14更多抑制:java.lang上的java.lang.ClassNotFoundException:md55b01af31820394fbfb172542d1258596. java.lang.Class.classForName(Native Method)中的MediaPickerActivity java.lang.BootClassLoader.findClass(ClassLoader.java:781) .lang.BootClassLoader.loadClass(ClassLoader.java:841)at java.lang.ClassLoader.loadClass(ClassLoader.java:504)... 15更多引起:java.lang.NoClassDefFoundError:Clas使用引导类加载器找不到;没有可用的堆栈跟踪}

然后我阅读了github插件的说明,它与视频的说明有些相似,并且发生了同样的错误。怎么能解决这个问题?

答案

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

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

以上是关于无法使用Xam.Plugin.Media插件的主要内容,如果未能解决你的问题,请参考以下文章

将图片从手机上传到服务器

Android 插件化VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(代码片

Android 插件化VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(代码片

错误记录发布 Flutter 插件包报错 ( It‘s strongly recommended to include a “homepage“ or “repository“ field )(代码片

代码片--写一个异常

微信小程序引入物流查询插件后新页面空白