"尝试确定电池电量时,不允许IntentReceiver组件注册接收意图"

 遇见你_天意_384 发布于 2023-01-01 13:12

我正在尝试按照http://developer.android.com/training/monitoring-device-state/battery-monitoring.html上的指南从我的应用程序获取电池信息

这是检查电池电量的方法:

public void sendBatteryInfoMessage(){

    IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = c.registerReceiver(null, iFilter);

    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;

    int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    boolean isUsbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
    boolean isAcCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

    int batteryLevel = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

    float batteryPct = batteryLevel / (float) scale;

}

cContext在类的早期初始化为对象.

这是我收到的错误消息

    07-24 18:11:23.445      634-634/wifi.myapp.sudara.lk.sudara_app W/dalvikvm? threadid=1: thread exiting with uncaught exception (group=0x40028890)
07-24 18:11:23.485      634-634/wifi.myapp.sudara.lk.sudara_app E/AndroidRuntime? FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start receiver wifi.myapp.sudara.lk.sudara_app.SmsActivity: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821)
            at android.app.ActivityThread.access$3200(ActivityThread.java:125)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:4627)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:521)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents
            at android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:138)
            at android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:132)
            at wifi.myapp.sudara.lk.sudara_app.BatteryInfo.sendBatteryInfoMessage(BatteryInfo.java:25)
            at wifi.myapp.sudara.lk.sudara_app.SmsActivity.onReceive(SmsActivity.java:53)
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810)
            at android.app.ActivityThread.access$3200(ActivityThread.java:125)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:4627)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:521)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
            at dalvik.system.NativeStart.main(Native Method)

我需要知道的是它的意义IntentReceiver components are not allowed to register to receive intents以及如何克服它.

谢谢

1 个回答
  • 代替:

    c.registerReceiver(null, iFilter)
    

    使用:

    c.getApplicationContext().registerReceiver(null, iFilter)
    

    Context传递给onReceive()进行呼叫阻塞registerReceiver(),即使有null BroadcastReceiver.

    2023-01-01 13:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有