Xamarin.android 使用自定义URL方案通过浏览器启动Xamarin Android应用程序 程序

Xamarin.android 使用自定义URL方案通过浏览器启动Xamarin Android应用程序 程序,xamarin.android,deep-linking,intentfilter,url-scheme,applinks,Xamarin.android,Deep Linking,Intentfilter,Url Scheme,Applinks,我有一个跨平台的Xamarin项目,需要一个URL方案。为了在XamarinAndroid上启用此功能,我在AndroidManifest.xml文件中添加了以下代码,参考post 问题 单击上面的超链接,应用程序不会启动。Visual Studio在输出中显示未处理的异常错误 Java.Lang.RuntimeException:无法实例化活动 ComponentInfo{com.companyname.UrlSchemeTest/com.companyname.UrlSchemeTes

我有一个跨平台的Xamarin项目,需要一个URL方案。为了在XamarinAndroid上启用此功能,我在
AndroidManifest.xml
文件中添加了以下代码,参考post


问题 单击上面的超链接,应用程序不会启动。Visual Studio在输出中显示
未处理的异常
错误

Java.Lang.RuntimeException:无法实例化活动 ComponentInfo{com.companyname.UrlSchemeTest/com.companyname.UrlSchemeTest.MainActivity}: java.lang.ClassNotFoundException:未找到类 路径:DexPathList[[zip]上的“com.companyname.UrlSchemeTest.MainActivity” 文件 “/data/app/com.companyname.UrlSchemeTest-1/base.apk”],nativeLibraryDirectories=[/data/app/com.companyname.UrlSchemeTest-1/lib/arm, /data/app/com.companyname.UrlSchemeTest-1/base.apk!/lib/armeabi-v7a, /供应商/lib,/system/lib]]

尝试的解决方案 1) 我查看了
AndroidManifest.xml
中的属性,可能是因为package属性与
MainActivity.cs
中使用的命名空间不匹配。所以我改了


MainActivity.cs

名称空间UrlSchemeTest.Droid
{
[活动(Label=“UrlSchemeTest”,Icon=“@mipmap/Icon”,
Theme=“@style/MainTheme”,MainLauncher=true,
ConfigurationChanges=ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
公共类MainActivity:全局::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
//这里的尸体
}
}
2) 在Android和iOS上的
中使用绝对类名。

说明 最初,我认为活动名称是名称空间(或包名称)和类名的组合。在原生Android和Xamarin Android 5.1之前的版本中也是如此。正如中所述,Xamarin Android 5.1及更高版本并非如此

从Xamarin.Android 5.1开始,活动的类型名称基于要导出类型的程序集限定名称的MD5SUM

对于我的应用程序,如果您构建它并在UrlSchemeTest.Android/obj/Debug/Android文件夹中打开
AndroidManifest.xml
文件,您将看到如下内容


如您所见,活动名称是md5 sum和类名的组合

因此,当我在
AndroidManifest.xml

解决方案 首先,我需要删除
AndroidManifest.xml
中的活动。在演示中,需要删除以下代码


然后,
MainActivity.cs

使用Android.App;
使用Android.Content;
[IntentFilter(新[]{Intent.ActionView},
Categories=new[]{Intent.CategoryDefault,Intent.CategoryBrowsable},
DataScheme=“urlschemetest”,
DataHost=“testurl”)]
公共类MainActivity:全局::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
创建时受保护的覆盖无效(捆绑包)
{
//代码在这里
}
}
Url方案现在应该可以工作了

作为建议,我认为如果可以的话,我们应该尽量不要修改
AndroidManifest.xml

Android允许您将自定义属性添加到类中,然后这些属性将用于自动为您生成清单,从而有助于将这一困难降至最低。我们的目标是99%的用户不需要手动修改AndroidManifest.xml

嗨,“urlschemetest”方案还在工作吗?在我的例子中,并没有检测到任何模式作为应用程序的链接,它只适用于https和http模式。