You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取电池优化权限弹窗授权状态?React Native Android开发问题

解决方案

方案1:基于现有包扩展权限查询能力

你现在使用的包仅提供弹窗唤起能力,可通过新增少量原生桥接代码补全状态查询功能:

  • 安卓原生层添加权限查询方法,利用系统自带APIPowerManager.isIgnoringBatteryOptimizations()实现查询:
    1. 在项目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);
        }
    }
    
    1. 确保AndroidManifest.xml中已配置权限:
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
    
    1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:45:03