Xamarin 使用 CallRedirectionService 引发 Java.Lang.ClassNotFoundException

Posted

技术标签:

【中文标题】Xamarin 使用 CallRedirectionService 引发 Java.Lang.ClassNotFoundException【英文标题】:Xamarin throws Java.Lang.ClassNotFoundException using CallRedirectionService 【发布时间】:2021-12-13 12:06:15 【问题描述】:

我使用此示例的空白模板创建了一个新的移动应用 Xamarin.Forms 项目。我正在尝试在我的应用中使用 CallRedirectionService,但会引发以下异常。

Java.Lang.ClassNotFoundException: crc64bf934172c93e128d.MyCallService ---> Java.Lang.NoClassDefFoundError: 解析失败: Landroid/telecom/CallRedirectionService; ---> Java.Lang.ClassNotFoundException:在路径上找不到类“android.telecom.CallRedirectionService”:DexPathList[[zip 文件“/data/app/com.companyname.xam-8bL_MB0IWItrj3Z69Zwvtw==/base.apk” ],nativeLibraryDirectories=[/data/app/com.companyname.xam-8bL_MB0IWItrj3Z69Zwvtw==/lib/x86, /data/app/com.companyname.xam-8bL_MB0IWItrj3Z69Zwvtw==/base.apk!/lib/x86, /system /lib]]

using Android.Telecom;
using Xamarin.Forms;    
namespace xam
    
        public class MyCallService : CallRedirectionService
        
            public override void OnPlaceCall(Android.Net.Uri handle, PhoneAccountHandle initialPhoneAccount, bool allowInteractiveResponse)
            
                //throw new NotImplementedException();
            
        
        public partial class MainPage : ContentPage
        
            public MainPage()
            
                var callCervice = new MyCallService();
                InitializeComponent();
            
        
    

我该如何解决它,因为其他服务不会抛出任何异常

例如

public class CallPreventer : InCallService

    public override void OnCallAdded(Call call)
    
        call.Disconnect();
        base.OnCallAdded(call);
    

Android options

Exception

【问题讨论】:

这可能被链接器剥离了?您在 Android 项目属性 -> Android 选项下的链接器设置是什么?您是否使用任何代码收缩器等? 所有属性和选项都是默认的,没有使用shrinker 我刚刚注意到您的屏幕截图 - 看起来您在 MainPage.cs 代码中添加了 Android 特定的代码,这大概是在您的共享项目中?如果你想使用 Android 特定的东西,它应该在你的 Android 项目中。要从后面的 MainPage 代码调用它,请使用 Xamarin Forms Dependency Service (docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/…) 【参考方案1】:

从屏幕截图看来,这段代码是 .NET 标准程序集(共享项目)的一部分,它不会引用 Mono Android。相反,请尝试使用Xamarin Forms Dependency Service 从共享代码中调用您想要的特定于平台的东西。见my recreation of your code here。

【讨论】:

以上是关于Xamarin 使用 CallRedirectionService 引发 Java.Lang.ClassNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin挖墙脚系列:使用Xamarin进行Hybrid应用开发

无法使用 Xamarin.Android 中的 Xamarin.Mobile 组件保存联系人

如果调用方未使用 Xamarin.Forms,Xamarin 依赖项服务能否正常工作?

使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角

Xamarin.Forms - 使用 Xamarin.Essentials 在两个坐标之间获取里程

Xamarin.Auth:使用身份提供者对用户进行身份验证 [xamarin forms - Android]