2013-03-28 74 views
1

當用戶按下電源按鈕( - >屏幕關閉)時,我試圖保存當前電池電量。鎖定屏幕不工作時保存當前電池電量

起初我有這將啓動每當手機啓動的廣播接收機。它的任務是啓動一個服務,該服務創建另一個廣播接收器用於屏蔽/打開意圖(因爲在清單中指定屏幕關閉意圖不會工作,我通過此服務動態創建它)

MyStartupReceiver

public class MyStartupReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context c, Intent i) { 
     if(i.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) 
     { 
      Log.d("Boot completed", "Boot completed"); 
      c.startService(new Intent(c, CreateReceiverService.class)); 
     } 
    } 
} 

CreateReceiverService

public class CreateReceiverService extends Service { 



    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 

     IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); 
     filter.addAction(Intent.ACTION_USER_PRESENT); 
     filter.addAction(Intent.ACTION_BATTERY_CHANGED); 

     BroadcastReceiver mReceiver = new ScreenReceiver(); 
     registerReceiver(mReceiver, filter);  
     Log.d("Service", "Receiver registered"); 
     return super.onStartCommand(intent, flags, startId); 
    } 

而這裏的ScreenRece艾弗

public class ScreenReceiver extends BroadcastReceiver { 

    private int lastBatteryLevel; 

    @Override 
    public void onReceive(Context c, Intent i) { 
     if(i.getAction().equals(Intent.ACTION_USER_PRESENT)) 
     { 
      Log.d("Screen unlock", "Screen unlock"); 
     } 
     else if(i.getAction().equals(Intent.ACTION_SCREEN_OFF)) 
     { 
      Log.d("Screen off", "Screen off"); 
      Intent s = new Intent(c, ActionService.class); 
      s.putExtra("LVL", lastBatteryLevel); 
      c.startService(s); 
     } 
     else if(i.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) 
     { 
      lastBatteryLevel = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
      Log.d("Battery changed", "level = "+lastBatteryLevel); 
     } 
    } 

現在我的問題: 的ActionService應該節省電池電量,以一個首選項文件: ActionService

public class ActionService extends Service { 

    private SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this); 
    Editor e = p.edit(); 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 

     e.putInt("LOCKLVL", intent.getIntExtra("LVL", -1)); 
     e.commit(); 
     Log.d("Saved preference", "saved "+p.getInt("LOCKLVL", -1)); 
     return super.onStartCommand(intent, flags, startId); 
    } 

的問題是,接收到屏幕關閉意圖時什麼也沒發生 - 我的ActionService,應該保存電池電量,不叫。

我logcat的輸出是:

Receiver registered 
Screen off 

沒有輸出 ActionService的Log.d( 「保存偏好」, 「拯救 」+ p.getInt(「 LOCKLVL」,-1) );

我甚至嘗試設置激活鎖定這樣的: ScreenReceiver

else if(i.getAction().equals(Intent.ACTION_SCREEN_OFF)) 
     { 
      WakelockHelper.acquireCpuWakeLock(c); //WAKELOCK TRY 
      Log.d("Screen off", "Screen off"); //OUTPUT OK 
      Intent s = new Intent(c, ActionService.class); 
      s.putExtra("LVL", lastBatteryLevel); 
      c.startService(s); //NOT CALLED 
     } 

,並釋放其偏好保存後。 但這並沒有改變任何東西。

只要是完整的,這是我WakelockHelper

public class WakelockHelper { 

    private static PowerManager.WakeLock sCpuWakeLock; 

    static void acquireCpuWakeLock(Context context) { 

     if (sCpuWakeLock != null) { 
      return; 
     } 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 


     sCpuWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"Tag"); 
     sCpuWakeLock.acquire(); 
     Log.i("Wakelock", "Wakelock set"); 
    } 

    static void releaseCpuLock() { 
     if (sCpuWakeLock != null) { 
      sCpuWakeLock.release(); 
      sCpuWakeLock = null; 
      Log.i("Wakelock", "Wakelock released"); 
     } 
    } 

} 

所以,我怎麼能保存在用戶鎖定手機當前電池電量? 爲什麼我的服務無法在屏幕截圖後啓動? 爲什麼wakelock沒有改變什麼?

謝謝!

回答

0

OUCH ...忘記聲明清單中的ActionService:O

相關問題