13

デバイスのバッテリー残量が少なくなったときにアプリを閉じたい。マニフェストに以下のコードを追加しました。

 <receiver android:name=".BatteryLevelReceiver" 
         <intent-filter>
            <action android:name="android.intent.action.ACTION_BATTERY_LOW" />
            <action android:name="android.intent.action.ACTION_BATTERY_OKAY" />
        </intent-filter>
 </receiver>

そしてレシーバーの次のコード

public class BatteryLevelReceiver extends BroadcastReceiver 
{

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show();
        Log.e("", "BATTERY LOW!!");
    }
}

エミュレータでアプリを実行し、telnetを使用してバッテリーレベルを変更しています。バッテリーレベルは変更されますが、トーストやログは表示されません。

私は何が欠けていますか?どんな助けでも大歓迎です!

4

5 に答える 5

41

にレシーバーを登録できAndroidManifest.xmlますが、フィルタリングするアクションが

android.intent.action.BATTERY_LOW

ではなく

android.intent.action.ACTION_BATTERY_LOW

(コードで使用したもの)。

于 2013-05-14T19:20:42.267 に答える
7

ファイルではなく、コードに受信者を登録しAndroidManifestます。

registerReceiver(batteryChangeReceiver, new IntentFilter(
    Intent.ACTION_BATTERY_CHANGED)); // register in activity or service

public class BatteryChangeReceiver extends BroadcastReceiver {

    int scale = -1;
    int level = -1;
    int voltage = -1;
    int temp = -1;

    @Override
    public void onReceive(Context context, Intent intent) {
        level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
        voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
    }
}

unregisterReceiver(batteryChangeReceiver);//unregister in the activity or service

nullまたは、受信機で電池残量を聞いてください。

Intent BATTERYintent = this.registerReceiver(null, new IntentFilter(
        Intent.ACTION_BATTERY_CHANGED));
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
Log.v(null, "LEVEL" + level);
于 2012-11-05T09:07:40.293 に答える
7

k3vは正しいです。

ドキュメントに実際にはエラーがあります。具体的にはを使用するように言っていますandroid.intent.action.ACTION_BATTERY_LOW。ただし、マニフェストに入力する正しいアクションは次のとおりです。http android.intent.action.BATTERY_LOW//developer.android.com/training/monitoring-device-state/battery-monitoring.html

(k3vの回答に投票できませんでした。StackOverflowのポイントが足りません...)

更新:私は今、賛成票を投じることができ、投票しました-k3vの答えに投票してください:-)

于 2013-08-22T21:29:31.527 に答える
1

コンテキストレジスタを使用して登録します。Android 8.0以降をターゲットにしている場合、マニフェストで宣言されたレシーバーを使用することはできません。このコードをメインアクティビティに貼り付けて登録します。

 BroadcastReceiver receiver = new BatteryLevelReceiver();
        IntentFilter filter =new IntentFilter(BatteryManager.EXTRA_BATTERY_LOW);
        filter.addAction(Intent.ACTION_BATTERY_LOW);
        this.registerReceiver(receiver, filter);

PSに移行しても 、エミュレータは充電状態になってはいけません。

于 2019-02-12T19:45:17.000 に答える
-1

エミュレータがメッセージに応答しない可能性がBATTERY_LOWありBATTERY_OKAYます。実際のAndroidデバイスで試してください。

于 2015-09-23T13:30:58.330 に答える