13

私はこの投稿とまったく同じ問題を抱えています:バッテリー放送受信機が機能しません。しかし、誰もその質問に答えていないようです。

これが私のBroadcastReceiverです:

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"/>

しかし、それでも成功しません!

誰かが私が間違っていることを私にアドバイスしてくれたら本当にありがたいです。

4

3 に答える 3

23

ACTION_BATTERY_CHANGEDのドキュメントから:

マニフェストで宣言されたコンポーネントを介してこれを受け取ることはできません。Context.registerReceiver()で明示的に登録するだけです。マニフェストレシーバーを介して送信および受信できる個別のバッテリー関連のブロードキャストについては、ACTION_BATTERY_LOW、ACTION_BATTERY_OKAY、ACTION_POWER_CONNECTED、およびACTION_POWER_DISCONNECTEDを参照してください。

これで、Javaコードから明示的に登録する必要があります。

于 2012-06-30T20:43:22.757 に答える
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の内部クラスとしてのReceiverによると、非静的クラスではそれを行うことはできません。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>

(Darshan Computingが指摘したように、BATTERY_CHANGEDではありません。)

于 2012-06-30T20:31:26.833 に答える
0

バッテリーレシーバークラスが別のサブクラスとしてではなく、プロジェクト内の個別のクラスとして存在することを確認してください。

また、コードでContext.registerReceiver()メソッドを明示的に使用してみて、登録を解除することを忘れないでください:http: //developer.android.com/reference/android/content/Context.html#registerReceiver%28android.content.BroadcastReceiver、% 20android.content.IntentFilter%29

于 2012-06-30T20:47:22.747 に答える