如标题所述,我正在尝试从另一个( native )Android 应用启动 Android Xamarin 应用,但 packageManager.queryIntentActivities
查询失败。所以我可能在 Android 应用程序方面做错了,或者更有可能在 Xamarin 方面做错了。
这是 Xamarin
端的类定义:
using Android.OS;
namespace DeepLinkTest.Droid
{
[Activity(Label = "DeepLinkTest", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
[IntentFilter(new[] { Android.Content.Intent.ActionView },
DataScheme = "*",
DataHost = "deeplinktest",
DataPath = "MyAppDidComplete",
Categories = new[] { Android.Content.Intent.CategoryDefault })]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
}
}
据我所知,intent
是 MainActivity
上方显示的位置。
这是我在 native Android 应用程序中进行的调用(基于 uri 的调用 - 也许这就是问题所在?):
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("deeplinktest://MyAppDidComplete/somedata"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
startActivity(intent);
}
最佳答案
您混淆了 URL 的 HOST 和 SCHEME。您的网址:
"deeplinktest://MyAppDidComplete/somedata"
分割如下:
- 方案:“深度链接测试”
- 主持人:“MyAppDidComplete”
- 路径:“/一些数据”
您的 IntentFilter
设置为匹配:
- 方案=“*”
- host = "深度链接测试"
- path = "MyAppDidComplete"
您应该修改一个或另一个以使它们匹配。
关于android - 从另一个 Android 应用程序启动 Xamarin Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192665/