我无法接收电池状态变化广播?(I can't receive broadcast on ba

2019-06-25 22:40发布

我有完全相同的问题,因为这个帖子: 电池广播接收器不工作 。 但似乎没有人回答了这个问题。

这里是我的广播接收器:

public class BatteryLevelReceiver extends BroadcastReceiver{


    @Override
    public void onReceive(Context context, Intent intent) {
    Log.v("plugg", "plug change fired");
    Toast.makeText(context, " plug change fired", Toast.LENGTH_LONG).show();
        }

这里是我的AndroidManifest.xml:

<receiver android:name=".ReceversAndServices.BatteryLevelReceiver">
               <intent-filter android:priority="900">
               <action android:name="android.intent.action.BATTERY_LOW" />

               </intent-filter>
           </receiver>

           <receiver android:name=".ReceversAndServices.BatteryLevelReceiver">
               <intent-filter android:priority="900">
               <action android:name="android.intent.action.BATTERY_CHANGED" />
               </intent-filter>
           </receiver>

我也加入了这一行的清单:

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

但仍然没有成功!

我真的很感激,如果有人能告诉我什么,我做错了。

Answer 1:

从对ACTION_BATTERY_CHANGED文档 :

你无法通过舱单申报组件收到此,只有通过与Context.registerReceiver明确登记为它()。 见ACTION_BATTERY_LOW,ACTION_BATTERY_OKAY,ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED为被发送,并且可以通过清单接收机接收不同电池相关广播。

现在你知道了:你必须明确地从Java代码注册它。



Answer 2:

我只是跟着Android开发者指南对监测电池电量和充电状态 ,不得不立即获得成功。 如果BatteryLevelReceiver是它自己的类,然后我会建议:

<receiver android:name=".BatteryLevelReceiver">
    <intent-filter android:priority="900">
       <action android:name="android.intent.action.BATTERY_LOW" />
       <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
</receiver>

加成

我愿意猜测,你写BatteryLevelReceiver在ReceversAndServices嵌套类。 根据接收机作为Android的内部类 ,你不能做到这一点与非静态类。 你可以做BatteryLevelReceiver静态类和登记的onResume()接收器,但是那么你的应用程序将需要运行赶上事件......将您的接收器一个单独的类和注册这些意图:

<receiver android:name=".BatteryLevelReceiver">
    <intent-filter android:priority="900">
       <action android:name="android.intent.action.BATTERY_LOW" />
       <action android:name="android.intent.action.BATTERY_OKAY" />
       <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
       <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
    </intent-filter>
</receiver>

(不BATTERY_CHANGED如达山计算指出。)



Answer 3:

请确保您有电池接收器类而不是另外一个的子类,但在你的项目中一个单独的类。

也可以尝试使用Context.registerReceiver()方法明确地在你的代码,不要忘记注销它: http://developer.android.com/reference/android/content/Context.html#registerReceiver%28android.content.BroadcastReceiver,% 20android.content.IntentFilter 29%



文章来源: I can't receive broadcast on battery state change?