繁体   English   中英

无法使用Xam.Plugin.Media插件

[英]Can't use Xam.Plugin.Media plugin

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

这是我的代码:

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:在路径:DexPathList [[zip.com/data/app/app。 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]在<657aa8fea4454dc898a9e5f379c58734>:0在Java.Interop中.JniEnvironment +静态方法。 jclass,System.IntPtr jmethod,Android.Runtime.JValue * parms)[0x0000e]在 在Android.Runtime.JNIEnv.FindClass(System.String类名)中的:0中的Android.Runtime.JNIEnv.CallStaticObjectMethod(System.IntPtr jclass,System.IntPtr jmethod,Android.Runtime.JValue [] parms)[0x00017] [0x0003d]在Android.Runtime.JNIEnv.FindClass(System.Type类型)的:0中[0x00084]在Java.Lang.Class.FromType(System.Type类型)的:0处[0x00022]在0的情况
在Android.Content.Intent..ctor(Android.Content.Context packageContext,System.Type类型)处[0x00000]在plugin.Media.MediaImplementation.CreateMediaIntent(System.Int32 id,System.String type,System.String动作,Plugin.Media.Abstractions.StoreMediaOptions选项,System.Boolean任务)在C:\\ projects \\ mediaplugin \\ src \\ Media.Plugin.Android \\ MediaImplementation.cs:411中位于Plugin.Media.MediaImplementation.TakeMediaAsync(系统.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(System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x0000c]在<657aa8fea4454dc898a9e5f379c58734>:0中的位置.Threading.Tasks.Task任务)[0x0003e]在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task任务)的<657aa8fea4454dc898a9e5f379c58734>:0中[0x0003e]在<657aa8fea4f>的System.Threading.Tasks.Task任务[0x00028] <657aa8fea4454dc898a9e5f379c58734>:0中的.CompilerServices.TaskAwaiter.ValidateEnd(System.Threading.Tasks.Task任务)[0x00008]在System.Runtime.CompilerServices.TaskAwaiter`1 [TResult] .GetResult()[0x00000]在<657aa8fea4>中的DC898c:f位于E:\\ Doctor Project \\ Mobile Applications \\ v1 \\ 4 \\ EClinicForDoctor \\ EClinicForDoctor \\ EClinicForDoctor \\ Pages \\ VisitsPage.xaml.cs:235的EClinicForDoctor.Pages.VisitsPage + d__17.MoveNext()[0x00175]托管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 md5270abb39e60627f0f200893b490aonClick。 (本机方法),位于md5270abb39e60627f0f200893b490a1ade.ButtonRenderer_ButtonClickListener.onClick(ButtonRenderer_ButtonClickListener.java:30),位于android.view.View.performClick(View.java:5697),位于android.widget.TextView.performClick(TextView.java:10826)。 android.os.Handler.dispatchMessage(Handler.java:95)的android.os.Handler.handleCallback(Handler.java:739)的view.View $ PerformClick.run(View.java:22526)android.os.Looper的android.os.Handler.dispatchMessage(Handler.java:95) .loop(Looper.java:158)at android.app.ActivityThread.main(ActivityThread.java:7225)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller的java.lang.reflect.Method.invoke(本机方法) .run(ZygoteInit.java:1230)在com.android.internal.os.ZygoteInit.ma in(ZygoteInit.java:1120)原因:java.lang.ClassNotFoundException:在路径:DexPathList [[zip文件“ /data/app/com.companyname.EClinicForDoctor-1/base”中找不到类“ md55b01af31820394fbfb172542d1258596.MediaPickerActivity” .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.ClassLoader.loadClass(ClassLoader.java:504)处的.lang.BootClassLoader.loadClass(ClassLoader.java:841)... 15更多原因:java.lang.NoClassDefFoundError:Clas 使用引导类加载器找不到; 没有可用的堆栈跟踪}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM