Попытка открыть настройки моего приложения, чтобы пользователь мог увидеть, какие разрешения требуются моему приложению. не могу найти ничего с подобным примером. *
if (item.Name == "Privacy preferences")
{
switch (Device.RuntimePlatform)
{
case Device.iOS:
Device.OpenUri(
new Uri(FORGOT WHAT TO PUT IN HERE .. APP/SETTINGS?);
break;
case Device.Android:
Device.OpenUri(
new Uri();
break;
}
*
Попробуйте Device.OpenUri(new Uri("app-settings:"));
Если это не сработает (я думаю, что это было давно), вам, вероятно, придется сделать это в частях вашей платформы и использовать, например, служба зависимости. Для IOS используйте UIApplication.SharedApplication.OpenUrl(new NSUrl("app-settings:"));
Обновлено: ответ @ EvZ - это тот, который содержит код для конкретной платформы и абстракцию, если вам также нужен UWP, вы можете вызвать
await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings:privacy-location"));
Довольно просто, вам нужно будет создать реализации для конкретной платформы.
Интерфейс
public interface ISettingsHelper
{
void OpenAppSettings();
}
iOS
public void OpenAppSettings()
{
var url = new NSUrl($"app-settings:{app_bundle_id}");
UIApplication.SharedApplication.OpenUrl(url);
}
Android
public void OpenAppSettings()
{
var intent = new Intent(Android.Provider.Settings.ActionApplicationDetailsSettings);
intent.AddFlags(ActivityFlags.NewTask);
var uri = Android.Net.Uri.FromParts("package", package_name, null);
intent.SetData(uri);
Application.Context.StartActivity(intent);
}
Из проекта Xamarin.Forms вы можете просто вызвать OpenAppSettings();
.
P.S .: Имейте в виду, что это решение требует настройки, если вы хотите, чтобы оно работало на старых устройствах.
Спасибо за ответ, сейчас попробую. Быстрый вопрос, если я не хочу иметь дело со старыми устройствами, я просто покажу своего рода предупреждение? на всякий случай.
Чтобы быть в безопасности, вы можете обернуть его блоками try catch и действовать соответственно. Это решение протестировано на Android 7.0 и iOS 11.3.
ваше решение хорошо работает на ios, но не на android. Не знаю, по какой-то странной причине, я делал это раньше, и раньше это работало для обеих платформ. Я также попробую решение @EvZ. Большое спасибо за помощь.