gpt4 book ai didi

android - Xamarin Forms - 如何检查 Android 上 RequestIgnoreBatteryOptimizations 权限的设置

转载 作者:行者123 更新时间:2023-12-05 02:39:53 24 4
gpt4 key购买 nike

(请参阅下面的更新)

我在 Android 上有一个 Xamarin Forms 应用程序,它使用 Xamarin.Essentials 库。

该应用程序需要在后台运行以获取位置数据(与手头的问题不是特别相关,但包含在上下文中),因此不得因操作系统可能尝试的任何电池优化而进入休眠状态。

我知道用户可以手动选择退出电池优化的特定应用程序,但由于它对应用程序的成功运行至关重要,我希望应用程序能够:

  1. 检查“电池优化退出”权限状态以确保其设置正确,

和/或

  1. 强制 Android 选择应用的任何电池优化。

我在 AndroidManifest.xml 中添加了一个条目,但它似乎没有帮助,新安装的应用程序默认为电池优化。

AndroidManifest.xml

list 包含以下条目:

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

Xamarin.Essentials

此库提供了对设备上许多与权限相关的信息的访问权限,但电池优化似乎不是其中之一。

正在使用的设备

我不知道它是否相关,但我正在三星 Galaxy S20 Ultra 上进行测试。

有人可以提供任何建议吗?

2021 年 8 月 28 日更新

遵循贡献者的建议并引用 https://learn.microsoft.com/en-us/xamarin/essentials/permissions?tabs=android#extending-permissions 上的文档...

在我的共享代码中

public interface IRequestIgnoreBatteryOptimizationPermission
{
Task<PermissionStatus> CheckStatusAsync();
Task<PermissionStatus> RequestAsync();
}

在我的安卓项目中

[assembly: Xamarin.Forms.Dependency(typeof(RequestIgnoreBatteryOptimizationPermission))]

namespace MyAndroidProject
{
public class RequestIgnoreBatteryOptimizationPermission : Permissions.BasePlatformPermission, IRequestIgnoreBatteryOptimizationPermission
{
public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)>
{
(Android.Manifest.Permission.RequestIgnoreBatteryOptimizations, true)
}.ToArray();
}
}

关于共享应用初始化

// Ensure Required Permissions have been granted
var requestIgnoreBatteryOptimizationPermission = DependencyService.Get<IRequestIgnoreBatteryOptimizationPermission>();

var status = requestIgnoreBatteryOptimizationPermission.CheckStatusAsync().Result;

if (status != PermissionStatus.Granted)
{
status = requestIgnoreBatteryOptimizationPermission.RequestAsync().Result;
}

结果...

调用 CheckStatusAsync 时,返回的结果为 Granted

但应用程序设置仍然另有说明......

enter image description here

enter image description here

我在物理设备 (Samsung Galaxy S20 Ultra) 和 Android 模拟器 (Pixel 2 API 28) 上都试过了,两者的结果相同。

最佳答案

来自 this document , 有两种设置电池优化的方法

应用可以触发 ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS Intent ,将用户直接带到电池优化,他们可以在其中添加应用。

拥有 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 权限的应用程序可以触发系统对话框,让用户直接将应用程序添加到豁免列表,而无需进入设置。该应用程序触发 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent 以触发对话。

我使用 PowserManager.isIgnoringBatteryOptimizations检查电池优化。

首先,在AndroidManifest.xml中添加RequestIgnoreBatteryOptimizations

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

然后在共享代码中创建接口(interface)。

public interface IBattery
{
void getbattery();
}

在Android平台实现此接口(interface)。

[assembly: Dependency(typeof(ImplementBattery))]
namespace FormsSample.Droid
{
public class ImplementBattery : IBattery
{
public void getbattery()
{
Intent intent = new Intent();
String packageName = MainActivity.mac.PackageName;
PowerManager pm = (PowerManager)MainActivity.mac.GetSystemService(Context.PowerService);
if (pm.IsIgnoringBatteryOptimizations(packageName))
intent.SetAction(Android.Provider.Settings.ActionIgnoreBatteryOptimizationSettings);
else
{
intent.SetAction(Android.Provider.Settings.ActionRequestIgnoreBatteryOptimizations);
intent.SetData(Android.Net.Uri.Parse("package:" + packageName));
}
MainActivity.mac.StartActivity(intent);
}
}
}

在 Mainactivity.cs 中创建静态 Mainactivity 字段。

  public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
public static MainActivity mac;
protected override void OnCreate(Bundle savedInstanceState)
{
initFontScale();
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;

base.OnCreate(savedInstanceState);

mac = this;

现在,使用 DependencyService 触发。

   private void Button_Clicked(object sender, EventArgs e)
{
DependencyService.Get<IBattery>().getbattery();
}

enter image description here

关于android - Xamarin Forms - 如何检查 Android 上 RequestIgnoreBatteryOptimizations 权限的设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68894283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com