Как открыть приложение Slack, установленное на моем мобильном телефоне, с помощью кнопки в Xamarin Forms? - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно открыть приложение Slack, установленное на моем мобильном телефоне, с помощью кнопки, созданной в формах Xamarin. У меня есть интерфейс, созданный в общем проекте, и событие нажатия кнопки в «MainPage». Позже я создал класс в project.android, который делает внедрение зависимостей, чтобы создать реализацию для открытия конкретного приложения с помощью «Intent»

/////Interface
namespace PracticaXamarin
{
   public interface IOpenAppService
   {
     Task<bool> Launch(string stringUri);
   }
}


/////Event click of the button on MainPage
namespace PracticaXamarin
{
   public partial class MainPage : ContentPage
   {
       void Handle_Clicked(object sender, System.EventArgs e)
       {
           DependencyService.Get<IOpenAppService>().Launch("slack");
           //DependencyService.Get<IOpenAppService> ().Launch("com.whatsapp");
       }

       public MainPage()
       {
           InitializeComponent();

       }
   }
}

/////The class created in the project.android
[assembly: Xamarin.Forms.Dependency(typeof(OpenAppService))]
namespace PracticaXamarin.Droid
{
   public class OpenAppService : Activity, IOpenAppService
   {
       public Task<bool> Launch(string stringUri)
       {
           try
           { 
               Intent intent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(stringUri);


               if (intent != null)
               {
                   intent.AddFlags(ActivityFlags.NewTask);
                   Forms.Context.StartActivity(intent);
               }
               else
               {
                   intent = new Intent(Intent.ActionView);
                   intent.AddFlags(ActivityFlags.NewTask);

intent.SetData(Android.Net.Uri.Parse("market://details?id=" + stringUri)); // This launches the PlayStore and search for the app if it's not installed on your device
                   Forms.Context.StartActivity(intent);
               }
               return Task.FromResult(true);
           }
           catch{
               return Task.FromResult(false);
           }

       }
   }
}

Что я могу сделать, это передать "Намерение" некоторых приложений, таких как "Намерение" WhatSapp, как показано в строке комментариев, которая открывает приложение WhatSapp

//DependencyService.Get<IOpenAppService>().Launch("com.whatsapp");

Но я не могу найти способ открыть приложение Slack. Есть ли у меня "Намерение" от Slack?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Вы можете использовать Slack "глубокое связывание" через пакет Xamarin.Essentials NuGet и пропустить службу зависимостей:

await Xamarin.Essentials.Launcher.OpenAsync("slack://open");

Пример использования:

if (await Xamarin.Essentials.Launcher.CanOpenAsync("slack://"))
{
    await Xamarin.Essentials.Launcher.OpenAsync("slack://open");
}
else
{
    // Load the Store page for the Stack App... or you could just open the device's browser to https://slack.com....
    if (Xamarin.Essentials.DeviceInfo.Platform == Xamarin.Essentials.DevicePlatform.iOS)
        await Xamarin.Essentials.Browser.OpenAsync("https://itunes.apple.com/app/slack-app/id618783545?ls=1&mt=8");
    else if (Xamarin.Essentials.DeviceInfo.Platform == Xamarin.Essentials.DevicePlatform.Android)
        await Xamarin.Essentials.Browser.OpenAsync("https://play.google.com/store/apps/details?id=com.Slack&hl=en_US");
    else
        Console.WriteLine("Something else..? Launch the device browser? ....");
}

re: https://api.slack.com/docs/deep-linking (перейдите к разделу "Глубокая связь с slack: //")

0 голосов
/ 22 апреля 2019

использование пользовательская схема Slack

Device.OpenUri(new Uri("slack://open"));
...