Запуск приложения Xamarin для Android из другого приложения для Android - PullRequest
0 голосов
/ 15 января 2019

Как видно из названия, я пытаюсь запустить приложение Android Xamarin из другого (нативного) приложения для Android, и запрос 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.

А вот звонок, который я делаю (звонок на основе URI - может быть, в этом проблема?) В родном приложении для Android:

            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);
            }

1 Ответ

0 голосов
/ 15 января 2019

Вы перепутали ХОСТ и СХЕМУ URL. Ваш URL:

"deeplinktest://MyAppDidComplete/somedata"

разбивается следующим образом:

  • схема: "deeplinktest"
  • хост: "MyAppDidComplete"
  • путь: "/ somedata"

Ваш IntentFilter настроен на совпадение:

  • схема = "*"
  • host = "deeplinktest"
  • path = "MyAppDidComplete"

Вам следует изменить одно или другое так, чтобы они совпадали.

...