Как запустить приложение Android Settings в настройках вашего приложения с помощью Xamarin.Essentials Launcher? - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю над приложением для Android и iOS, используя Xamarin.Forms вместе с Xamarin.Essentials. Я хотел бы иметь возможность предоставить в своем приложении кнопку, которая перенаправит пользователя в приложение «Настройки» устройства, а затем на страницу настроек c для этого приложения, над которым я работаю.

Ранее это было сделано с помощью службы зависимостей для вызова кода, определяемого платформой c. Я считаю, что sh можно сделать гораздо проще и без кода, специфичного для платформы c, с помощью средства запуска Xamarin.Essentials ( документация Microsoft здесь ). Я понял, как это сделать на iOS:

bool didOpenUri = await Xamarin.Essentials.Launcher.TryOpenAsync("app-settings:com.yourCompany.yourApp");

Однако я не смог обнаружить, как это сделать на Android. Если что-то неясно, пожалуйста, дайте мне знать. В противном случае, любая помощь приветствуется ... Большое спасибо!

Ответы [ 2 ]

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

@ WendyZang очень любезно предоставил ответ на оригинальный вопрос, который заключается в том, что вы, к сожалению, не можете запустить приложение настроек Android (не говоря уже о настройке параметров специально для вашего собственного приложения) с помощью средства запуска Xamarin.Essentials .

Вместо этого вы должны использовать службу зависимостей с реализациями платформы c. Чтобы помочь другим, кто сталкивается с такой же проблемой, я хотел добавить полное решение по настройке службы зависимостей как на iOS, так и на Android, которая перемещается не только в приложение настроек ОС, но и конкретно в настройки вашего приложения:

В вашем кроссплатформенном проекте интерфейс может выглядеть примерно так: Вам нужно будет указать идентификатор пакета вашего приложения (например, com.myCompany.myApp):

namespace MyCoolMobileApp.Services.DependencyServices
{
    public interface ISettingsAppLauncher
    {
        void LaunchSettingsApp(string appBundleId);
    }
}

В Android ваша реализация может выглядеть следующим образом (обратите внимание, что я использую James Плагин MonteAgno CurrentActivity ):

using System.Diagnostics;
using Android.Content;
using Plugin.CurrentActivity; // https://github.com/jamesmontemagno/CurrentActivityPlugin
using MyCoolMobileApp.Droid.Services.DependencyServices;
using MyCoolMobileApp.Services.DependencyServices;
using Xamarin.Forms;

[assembly: Dependency(typeof(SettingsAppLauncher_Android))]
namespace MyCoolMobileApp.Droid.Services.DependencyServices
{
    public class SettingsAppLauncher_Android : ISettingsAppLauncher
    {
        public void LaunchSettingsApp(string  appBundleId)
        {
            var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings);
            intent.AddFlags(ActivityFlags.NewTask);
            var uri = Android.Net.Uri.FromParts("package", appBundleId, null);
            intent.SetData(uri);
            CrossCurrentActivity.Current.AppContext.StartActivity(intent);
        }
    }
}

И, наконец, реализация iOS будет иметь следующий вид:


using System.Diagnostics;
using Foundation;
using MyCoolMobileApp.iOS.Services.DependencyServices;
using MyCoolMobileApp.Services.DependencyServices;
using UIKit;
using Xamarin.Forms;

[assembly: Dependency(typeof(SettingsAppLauncher_iOS))]
namespace MyCoolMobileApp.iOS.Services.DependencyServices
{
    public class SettingsAppLauncher_iOS : ISettingsAppLauncher
    {
        public void LaunchSettingsApp(string appBundleId)
        {
            var url = new NSUrl($"app-settings:{appBundleId}");
            UIApplication.SharedApplication.OpenUrl(url);
        }
    }
}
0 голосов
/ 16 апреля 2020

Насколько мне известно, для Android настроек нет URL. Лаунчер его не поддерживает.

Но класс Settings предоставляет строки действий для приложения Settings.

Класс настроек: https://docs.microsoft.com/en-us/dotnet/api/android.provider.settings?view=xamarin-android-sdk-9

Это можно сделать в Android:

StartActivity(new Intent(Settings.ActionSettings));

И используйте службу зависимости для этого в Xamarin.Forms.

Служба зависимости: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction

Обновлено:

В Xamarin.Forms:

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

 public interface IStartSetttings
 {
    void StartSettings();
 }

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

[assembly: Dependency(typeof(StartSettings_Implementation))]
namespace XamarinDemo.Droid.DependencyService_Implementation
{
    class StartSettings_Implementation : MainActivity, IStartSetttings
    {
        public void StartSettings()
        {
            var intent = new Intent(Settings.ActionSettings);
            Forms.Context.StartActivity(intent);          

        }
    }
}

Использование в Xamarin.Forms:

 DependencyService.Get<IStartSetttings>().StartSettings();

Снимок экрана:

enter image description here

...