从Activity调用BroadcastReceiver

时间:2015-09-08 22:52:58

标签: java android

我是android编程的新手;对不起,如果我的问题很容易:) 我正在尝试编写监控手机电池电量的代码,如果是,请降低某个级别,例如(%15),创建一条消息,要求用户插上充电器。我知道我需要使用BroadcastReceiver类,我想在我的MainActivity类中使用它。这是我的代码:

public class MainActivity extends Activity{
BroadcastReceiver br = new BroadcastReceiver() {
    @Override
    public void onReceive(final Context context, Intent intent) {
        String intentAction = intent.getAction();
        Log.d("receiver", intentAction);
        int level = intent.getIntExtra("level", 0);
        if (level < 15){
            Log.d("receiver", "battery level low");
        }

        if (Intent.ACTION_BATTERY_OKAY.equalsIgnoreCase(intentAction)) {
            Log.d("receiver", "battery level okay");
        }
    }
};
......

但似乎永远不会调用onReceive方法,因为我从未在Android Studio调试窗口中看到Log.d("receiver", intentAction)消息。 我还在br注册了onResume,并在onPause取消注册:

public void onResume() {
    super.onResume();
    filter.addAction("receiver");
    registerReceiver(br, filter);
}

public void onPause() {
    super.onPause();
    unregisterReceiver(br);
}

但我仍然没有收到任何消息。 有人可以帮帮我吗?我还应该向AndroidManifest.xml添加内容吗?

2 个答案:

答案 0 :(得分:0)

onResume()中的代码错误。您必须按如下方式更新它。

    filter.addAction(Intent.ACTION_BATTERY_LOW);
    filter.addAction(Intent.ACTION_BATTERY_OKAY);
    registerReceiver(br, filter);

包含ACTION_BATTERY_LOW中提到的ACTION_BATTERY_OKAYdocs过滤器。

答案 1 :(得分:0)

如果您不想使用BroadcastReceiver,请不要使用它。电池意图是粘性意图所以你可以在不需要BroadcastReceiver的情况下进行检查,我也不认为把接收器放在活动中是个好主意。您可以像这样查看活动中的电池内容,而无需编辑清单

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, filter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;
if(batteryPct < 15){
    //do your stuff
}