Как запустить приложение из другого в формах Xamarin - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь запустить приложение, которое я создал, из другого приложения, над которым я сейчас работаю. Дело в том, что я искал через inte rnet и нашел что-то, но это не сработало, поэтому я ищу здесь помощь.

Это то, что я сделал в приложении, из которого хочу запустить :

На моем xaml.cs:

public async void GoToDigDitApp(object sender, EventArgs e)
        {
            var appname = "digdit://";
            var result = await DependencyService.Get<IAppHandler>().LaunchApp(appname);
        } 

Я создал интерфейс:

    public interface IAppHandler
    {
        Task<bool> LaunchApp(string uri);
    }

В проекте Android:


[assembly: Dependency(typeof(OpenAppAndroid))]
namespace SupervisingApp.Droid
{
    [Activity(Label = "OpenAppAndroid")]
    public class OpenAppAndroid : Activity, IAppHandler
    {
        public Task<bool> LaunchApp(string uri)
        {
            bool result = false;
            try
            {
                var aUri = Android.Net.Uri.Parse(uri.ToString());
                var intent = new Intent(Intent.ActionView, aUri);
                Android.App.Application.Context.StartActivity(intent);


                result = true;
            }
            catch (ActivityNotFoundException)
            {
                result = false;
            }
            return Task.FromResult(result);
        }
    }
}

И это приложение, которое я хочу запустить манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.Tab2" android:installLocation="auto">
   <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.CAMERA" />
   <application android:label="Dig Dit" android:icon="@drawable/ic_launcher">
       <activity android:icon="@drawable/ic_launcher" android:label="Dig Dit" android:name="digdit.urlentryclass">
           <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="digdit" />
           </intent-filter>
       </activity>
   </application>
</manifest>

Пока что я заинтересован только частью Android, и, похоже, она не работает. Надеюсь, вы, ребята, сможете мне помочь.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Вы можете использовать PackageManager.GetLaunchIntentForPackage.

Попробуйте код ниже. com.companyname.app2 - это имя пакета приложения 2.

 Intent intent = PackageManager.GetLaunchIntentForPackage("com.companyname.app2");
            StartActivity(intent);

enter image description here

Обновлено:

Создание интерфейса:

 public interface IDpendencyService
{
    Task<bool> Launch(string stringUri);
}

Реализация Android:

 public class DependencyImplementation : Activity, IDpendencyService
{
    public Task<bool> Launch(string stringUri)
    {

        Intent intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);
        if (intent != null)
        {
            intent.AddFlags(ActivityFlags.NewTask);
            Forms.Context.StartActivity(intent);
            return Task.FromResult(true);
        }
        else
        {
            return Task.FromResult(true);
        }



    }
}

Использование MainPage:

<StackLayout>
    <!--  Place new controls here  -->
    <Label
        FontAttributes="Bold"
        FontSize="Large"
        HorizontalOptions="Center"
        Text="Welcome to App1!"
        VerticalOptions="CenterAndExpand" />
    <Button x:Name="GotoApp2" Text="GotoApp2" Clicked="GotoApp2_Clicked"></Button>
</StackLayout>


 private void GotoApp2_Clicked(object sender, EventArgs e)
    {
        DependencyService.Get<IDpendencyService>().Launch("com.companyname.app2");
    }

enter image description here

У меня есть загрузить на GitHub, вы можете загрузить из папки StartAnotherApp_Xamarin.forms/App1 для справки. https://github.com/WendyZang/Test.git

0 голосов
/ 07 февраля 2020

Вы можете открыть свое приложение с xamarin.forms

Device.BeginInvokeOnMainThread(() =>
{
    Xamarin.Forms.Device.OpenUri(new Uri("digdit://555-1111"));
});
...