Аккумуляторный приемник не работает - PullRequest
0 голосов
/ 21 декабря 2011

Не знаю, почему, но мой приемник батареи не работает.

AndroidManifest.xml

<receiver android:name=".BatteryReceiver" android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" />
        <action android:name="android.intent.action.BATTERY_LOW" />
    </intent-filter>
</receiver>

BatteryReceiver.java

public class BatteryReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        int level = intent.getIntExtra( "level", 0 );
        Log.d("Battery", "level: "+level);
        Toast.makeText(context, "Battery low!", Toast.LENGTH_LONG).show();      
    }
}

Что не так с моим кодом?Я использую консоль (telnet), чтобы изменить уровень заряда батареи (мощность X).

1 Ответ

7 голосов
/ 06 июля 2012

Есть несколько вопросов; Я заказал их примерно по степени тяжести:

  1. Вы не можете зарегистрироваться на ACTION_BATTERY_CHANGED из своего манифеста; Вы должны зарегистрироваться для этого программно.

  2. Не используйте разрешение BATTERY_STATS; это совершенно не связано.

  3. Если вы принимаете несколько широковещательных рассылок в одном и том же BroadcastReceiver (и, как правило, это хорошая идея, даже если вы этого не делаете), вам следует проверить, какую рассылку вы только что получили. ACTION_BATTERY_LOW не следует трактовать так же, как ACTION_BATTERY_CHANGED. (Во-первых, к нему не прикреплено BatteryManager.EXTRA_LEVEL Extra, поэтому попытка прочитать его даст вам значение по умолчанию, 0.)

  4. Вы должны использовать -1 в качестве значения по умолчанию, а не действительное значение, как 0.

  5. Вы должны проверить, получили ли вы значение по умолчанию и обработать его соответствующим образом.

  6. Вы должны использовать BatteryManager.EXTRA_LEVEL вместо жесткого "уровня".

...