2011-09-05 115 views
0

我正在使用鬧鐘來定期執行某些操作。鬧鈴在手機完成啓動時設定。當電池電量下降當電池電量不足時啓用/啓用BroadcastReceiver

@Override 
public void onReceive(final Context context, final Intent intent) { 
    if (intent != null && intent.getAction() != null) { 
     String action = intent.getAction(); 
     if (action.equals(Intent.ACTION_BOOT_COMPLETED)) { 
      // Set alarm 
     } else if (action.equals(Intent.ACTION_BATTERY_LOW)) { 
      setLocationAlarmReceiverEnabled(context, false); 
     } else if (action.equals(Intent.ACTION_BATTERY_OKAY)) { 
      setLocationAlarmReceiverEnabled(context, true); 
     } 
    } 
} 

private void setLocationAlarmReceiverEnabled(final Context context, 
     final boolean enabled) { 
    PackageManager packageManager = context.getPackageManager(); 
    ComponentName locationAlarmReceiver = new ComponentName(context, 
      LocationAlarmReceiver.class); 
    packageManager.setComponentEnabledSetting(locationAlarmReceiver, 
     enabled ? PackageManager.COMPONENT_ENABLED_STATE_DEFAULT 
       : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
     PackageManager.DONT_KILL_APP); 
} 

在實際的測試中,我可以確認的是,BroadcastReceiver「LocationAlarmReceiver」被禁用:當電池變低時,BroadcastReceiver接到報警,並啓動服務被禁用和啓用時電池又是好的到15%,手機連接到AC/USB後,當電池電量上升到30%時,它再次啓用。

但現在我有以下情形:

  1. 電池電量下降到15%,「LocationAlarmReceiver」被禁用
  2. ,因爲電池電量耗盡手機最終會自行關閉
  3. 電話連接到AC/USB
  4. 電話開機並開機,繼續充電,電池電量達到100%
  5. 「LocationAlarmReceiver」仍然被禁用

我只能猜測Intent.ACTION_BATTERY_OKAY意圖從未交付。

這個觀察是否正確?我怎樣才能確保「LocationAlarmReceiver」被再次啓用?

回答

1

如果您沒有接到Intent.ACTION_BATTERY_OKAY的電話,那麼您應在接到ACTION_BOOT_COMPLETED的電話時啓用接收器,檢查您的接收器是否被禁用,那麼您應啓用它。

+0

我想過這麼多謝謝確認,但我想這可能意味着'BroadcastReceiver'在電池電量(仍然)低時啓用? –

+0

然後你應該在啓用接收器之前檢查電池電量,如果電池電量高於15%,那麼你可以啓用它...... –

+0

是的,這裏是如何做到這一點的信息:[鏈接](http:// stackoverflow問題:3661464/get-battery-level-before-broadcast-receiver-responds-for-intent-action-battery-ch) –

相關問題