2012-10-28 146 views
0

我正在開發一個Android項目,我正在一個擴展BroadcastReceiver的類中註冊一個廣播接收器,它接收ACTION_POWER_CONNECTED,ACTION_POWER_DISCONNECTEDACTION_SCREEN_OFF的意圖。檢查電源是否連接android

當接收到這些不同的意圖時,它會調用另一個類中的函數,這個類擴展了Service

當接收到ACTION_POWER_CONNECTED它也要求一個名爲isPowerConnected函數,應該檢查電源是否接通,如果沒有它,然後使激活鎖定。

我遇到的問題是,當我執行isPowerConnected功能似乎工作第一次,但隨後它接收到每個其他時間:

android.content.ReceiverCallNotAllowedException:IntentReceiver 部件不準註冊以接收意圖。

我不知道如何解決這個問題。以下是isPowerConnected的代碼。

public boolean isPowerConnected() 
{ 
    int pluggedIn = -1; 
    try 
    { 
     Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
     pluggedIn = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
    } 
    catch (Exception ex) 
    { 
     Log.e("IsPowerConnected", ex.toString()); 
    } 
    return pluggedIn == BatteryManager.BATTERY_PLUGGED_AC || pluggedIn == BatteryManager.BATTERY_PLUGGED_USB; 
} 

感謝您提供任何幫助。

+0

如果您被告知您剛接通電源,爲什麼要檢查是否再次接通電源?您也可以註冊「ACTION_POWER_DISCONNECTED」並自行管理狀態 –

回答

0

您不能在現有的BroadcastReceiver中註冊新的BroadcastReceiver,您實際上正在執行此操作。

+1

因此,如何才能檢查電源是否連接,因爲這是我需要做的事情 – Boardy

+0

雖然您無法從廣播註冊廣播接收器接收器,沒有任何東西可以阻止你的廣播接收器啓動'IntentService'來完成應該解決這個問題的註冊 –