如何获取电池优化权限弹窗授权状态?React Native Android开发问题
解决方案
方案1:基于现有包扩展权限查询能力
你现在使用的包仅提供弹窗唤起能力,可通过新增少量原生桥接代码补全状态查询功能:
- 安卓原生层添加权限查询方法,利用系统自带API
PowerManager.isIgnoringBatteryOptimizations()实现查询:- 在项目android目录下的自定义原生模块中新增如下React方法:
import android.os.PowerManager; import android.content.Context; import android.os.Build; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactMethod; @ReactMethod public void isBatteryOptimizationDisabled(Promise promise) { PowerManager pm = (PowerManager) getReactApplicationContext().getSystemService(Context.POWER_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { boolean isGranted = pm.isIgnoringBatteryOptimizations(getReactApplicationContext().getPackageName()); promise.resolve(isGranted); } else { // 安卓6.0以下无该权限限制,默认返回已授权 promise.resolve(true); } }- 确保
AndroidManifest.xml中已配置权限:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />- JS端在唤起权限弹窗后,监听
AppState的active状态,当应用回到前台时调用上述桥接方法,即可拿到用户在弹窗内的选择结果。
方案2:替换为功能更完善的权限实现
直接使用维护更活跃的通用权限库替代当前小众包,原生层逻辑已封装完成,无需自行写桥接代码:
- 安装配置对应权限库后,可直接通过JS方法查询权限状态、申请权限,一步拿到用户选择结果:
import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions'; // 查询权限状态 const getBatteryPermissionStatus = async () => { const status = await check(PERMISSIONS.ANDROID.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); return status === RESULTS.GRANTED; } // 申请权限直接返回用户选择结果 const requestBatteryPermission = async () => { const status = await request(PERMISSIONS.ANDROID.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); return status === RESULTS.GRANTED; }
内容的提问来源于stack exchange,提问作者Ramesh
相关产品推荐
相关产品推荐

