Zie*_*iem 0 java android power-management broadcastreceiver
我不知道为什么,但我的电池广播接收器不起作用.
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>
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码出了什么问题?我正在使用控制台(telnet)来改变电池电量(电源容量X).
有几个问题; 我通过降低严重程度粗略地命令它们:
你不能ACTION_BATTERY_CHANGED
从你的清单注册; 你必须以编程方式注册它.
不要使用BATTERY_STATS
许可; 它完全不相关.
如果您在同一个BroadcastReceiver中接收多个广播(即使您不是,这通常也是一个好主意),您应该检查您刚收到的广播. ACTION_BATTERY_LOW
不应该以同样的方式对待ACTION_BATTERY_CHANGED
.(首先,它没有BatteryManager.EXTRA_LEVEL
Extra附加到它,所以尝试阅读它会给你你的默认值,0
.)
您应该使用-1
默认值,而不是有效值0
.
您应该检查是否已收到默认值并正确处理.
你应该使用BatteryManager.EXTRA_LEVEL
而不是硬编码"级别".