Xamarin.android 使用自定义URL方案通过浏览器启动Xamarin Android应用程序 程序
我有一个跨平台的Xamarin项目,需要一个URL方案。为了在XamarinAndroid上启用此功能,我在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
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模式。