2013-03-28 87 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