使用自定义网址方案通过浏览器启动Xamarin Android应用

时间:2018-08-15 14:44:25

标签: xamarin.android deep-linking intentfilter url-scheme applinks

程序

我有一个需要URL方案的跨平台Xamarin项目。为了在Xamarin Android上启用此功能,我在AndroidManifest.xml文件中添加了以下代码,引用了launch custom android application帖子。

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="urlschemetest" android:host="testurl" />
    </intent-filter>
</activity>

直接在Android中的浏览器上键入urlschemetest://testurl会转到Google搜索,而不是启动应用程序。因此,我有一个简单的html页面,其中包含一个可打开应用程序test url scheme的超链接。

<a href="urlschemetest://testurl">open app</a>

问题

通过单击上方的超链接,该应用未启动。 Visual Studio在输出中显示Unhandled Exception错误

  

Java.Lang.RuntimeException:无法实例化活动   ComponentInfo {com.companyname.UrlSchemeTest / com.companyname.UrlSchemeTest.MainActivity}:   java.lang.ClassNotFoundException:找不到类   路径上的“ com.companyname.UrlSchemeTest.MainActivity”:DexPathList [[zip   文件   “ /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,   / vendor / lib,/ system / lib]]

尝试的解决方案

1)我查看了AndroidManifest.xml中的属性,这可能是因为 package 属性与在其中使用的命名空间不匹配MainActivity.cs。所以我改变了。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   android:versionCode="1" 
   android:versionName="1.0" 
   package="UrlSchemeTest.Droid" 
   android:installLocation="auto">

MainActivity.cs

namespace UrlSchemeTest.Droid
{
    [Activity(Label = "UrlSchemeTest", Icon = "@mipmap/icon", 
        Theme = "@style/MainTheme", MainLauncher = true, 
        ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity :global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
         //body here
    }
}

2)在<activity>标签中使用绝对类名

<activity android:name="UrlSchemeTest.Droid.MainActivity">

3)要查看这是否是模拟器错误,我已经在Android模拟器和真实的Android设备上测试了该应用。

注意:,尽管我已经在Android和iOS上创建了此Xamarin simple demo,但这个问题是关于使其在Android平台上工作的。

0 个答案:

没有答案