【发布时间】:2019-01-22 11:09:00
【问题描述】:
程序
我有一个需要 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 中的attributes,可能是因为package 属性与@987654331 中使用的namespace 不匹配@。所以我改了。
<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 平台上运行的。
【问题讨论】:
标签: xamarin.android deep-linking intentfilter url-scheme applinks