我看到其中提及的帖子registerReceiver
有被称为(清单中没有定义)来接收ACTION_BATTERY_LOW
意图。
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
//....
registerReceiver(new BatteryLevelReceiver(), new IntentFilter(
Intent.ACTION_BATTERY_LOW));
}
// .......
}
广播接收器
public class BatteryLevelReceiver extends BroadcastReceiver
{
private static final String TAG = BatteryLevelReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent)
{
Log.d(TAG, "onReceive");
}
}
我没有看到在logcat中的“的onReceive”日志语句。 我使用模拟器来模拟电池低状态时,使用telnet 5554
和执行power capacity 10
。 我看到电池状态在模拟器改变,但无意触发。
另外,如果我有打电话给registerReceiver()
的活动中,我不叫unregisterReceiver
上onStop
或onDestroy
,是它好吗? 如果不行,我怎么会注册一个接收器接收系统的意图,即使我的应用程序是不是在前台? (除了使用清单)。
您可以在清单中添加以下代码。
<receiver android:name=".yourpackage.BroadCastNotifier" >
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
在您的BroadCastNotifier Class
package yourpackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BroadCastNotifier extends BroadcastReceiver {
private final static String TAG = "BroadCastNotifier";
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if(Intent.ACTION_BATTERY_LOW.equalsIgnoreCase(intentAction)){
Log.e(TAG, "GOT LOW BATTERY WARNING");
}
}
}
您将收到日志消息GOT LOW BATTERY WARNING
当电池电量低时,也是在您的设备尝试。
虽然上面的代码可能工作的最好办法是不使用广播对这种行动,你可以监控电池的水平在这里描述 。 您可以确定下面是比较容易的方式代码您的电池。
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;
确保:1.您正在设置“连接充电器”“无” 2.这电池状态为“放电”
你可以注册ACTION_BATTERY_LOW
在清单-见我详细的解答在这里 -你不能注册ACTION_BATTERY_CHANGED
在清单。
您没有收到它的原因可能是你忘了申报你的接收器清单
另外,如果我有打电话给registerReceiver()
的活动中,我不叫unregisterReceiver
上onStop
或onDestroy
,是它好吗?
不,你应该在注册onResume
和注销onPause
ALWAYS -之后onPause
被称为接收机无论如何也不会接受
如果不行,我怎么会注册一个接收器接收系统的意图,即使我的应用程序是不是在前台? (除了使用清单)。
只有在清单
文章来源: Android: ACTION_BATTERY_LOW not triggered in emulator. Receiver registered in code, not manifest