簡體   English   中英

從Activity調用BroadcastReceiver

[英]calling BroadcastReceiver from Activity

我是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)消息。 我也在onResume注冊了br ,並在onPause取消了注冊:

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

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

但是我仍然沒有收到任何消息。 有人可以幫我嗎? 我還應該在AndroidManifest.xml添加一些內容嗎?

您在onResume()代碼是錯誤的。 您將必須按以下方式對其進行更新。

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

包含docs中提到的ACTION_BATTERY_LOWACTION_BATTERY_OKAY過濾器。

如果您不想使用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM