Xamarin.Forms Android如何请求自启动与无限制电池优化权限?
应用后台保活与权限自动引导需求
我正在开发一款应用,要求服务在设备重启后仍能正常运行。目前已经实现了开机自启功能,也完成了存储、麦克风等基础权限的请求逻辑。但在小米等部分国产设备上,必须手动开启「自启动权限」和「无限制电池优化」才能确保服务稳定运行。现在希望实现自动引导用户开启这两项权限的功能,无需用户手动进入系统设置操作,未来还计划适配iOS平台。
已实现的开机自启代码
namespace Corporate_messenger.Droid.Broadcast { [BroadcastReceiver(Name = "com.companyname.corporate_messenger.BootReceiver", Enabled = true, Exported = true)] [IntentFilter(new[] { Android.Content.Intent.ActionBootCompleted })] public class BootReceiver : BroadcastReceiver { private void Start1(Context context) { Intent mycallIntent = new Intent(context, typeof(MainActivity)); mycallIntent.AddFlags(ActivityFlags.NewTask); Android.App.Application.Context.StartActivity(mycallIntent); } public override void OnReceive(Context context, Intent intent) { try { var intentService = new Intent(context, typeof(NotoficationService)); if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O) { SpecialData.RestartResponse = true; context.StartForegroundService(intentService); } else { context.StartService(intentService); // Flag_On_Off_Service = true; } } catch(Exception ex) { Log.Error("MyLog", ex.Message); } } // OnReceive } }
已实现的基础权限请求代码
public async Task Permission() { var PermissionsStrorage_Write = await Permissions.CheckStatusAsync<Permissions.StorageWrite>(); var PermissionsInternet = await Permissions.CheckStatusAsync<Permissions.NetworkState>(); var PermissionsStrorage_Read = await Permissions.CheckStatusAsync<Permissions.StorageRead>(); var PermissionsRecord = await Permissions.CheckStatusAsync<Permissions.Microphone>(); if (PermissionsInternet != PermissionStatus.Granted) { PermissionsInternet = await Permissions.RequestAsync<Permissions.NetworkState>(); } if (PermissionsRecord != PermissionStatus.Granted) { PermissionsRecord = await Permissions.RequestAsync<Permissions.Microphone>(); } if (PermissionsStrorage_Write != PermissionStatus.Granted && PermissionsStrorage_Read != PermissionStatus.Granted) { PermissionsStrorage_Write = await Permissions.RequestAsync<Permissions.StorageWrite>(); PermissionsStrorage_Read = await Permissions.RequestAsync<Permissions.StorageRead>(); } if (PermissionsStrorage_Write != PermissionStatus.Granted && PermissionsStrorage_Read != PermissionStatus.Granted) { return; } }
内容的提问来源于stack exchange,提问作者Katya Appazova
相关产品推荐
相关产品推荐

