3

繰り返しアラームブロードキャスターが呼び出されたときにAndroidバッテリーの状態を読み取ろうとしていますが、次の設定があります。

public class RepeatingAlarm extends BroadcastReceiver {

    @Override       
    public void onReceive(Context context, Intent intent)
    {

            // Acquire the make of the device
            final String PhoneModel = android.os.Build.MODEL;
            final String AndroidVersion = android.os.Build.VERSION.RELEASE;

            // Grab the battery information
            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            final float batteryPct = level / (float)scale; 
    }

}

しかし、なぜそれが戻ってくるのかわかりませんbatteryPct = 1。ここに欠けているものはありますか?AndroidのGoogleページに基づいて正しい権限を追加しましたが、それは役に立たなかったようです。

4

2 に答える 2

9

-1との両方levelを取得していscaleます。ACTION_BATTERY_CHANGEDこれは、マニフェストでブロードキャストしようとしている可能性があるためです。

ACTION_BATTERY_CHANGEDはスティッキーインテントであり、マニフェストでレシーバーを登録することはできません。次を試してください

 Intent i = new ContextWrapper(applicationContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
 // now you can get the level and scale from this intent variable
int level = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = i.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float battPct = level/(float)scale;

この目的のために受信機をデバイス化する必要はありません。使用したい場所で、上記の方法を使用してください。

于 2013-02-11T03:22:13.150 に答える
2

levelscale変数(指定したデフォルト値)の両方で-1が得られる可能性があるため、それらの値を出力して、intentにこれらの値が正しく設定されていることを確認してください。

あなたはAndroidでバッテリーレベルACTION_BATTERY_CHANGEDを取得するために耳を傾ける必要があります

于 2013-02-11T03:11:27.160 に答える