我有一个需要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平台上工作的。