簡體   English   中英

Android:在后台服務中打開/關閉屏幕時幫助計數

[英]Android: Help counting when the screen is turning off/on in a background service

對於我正在使用的一個小應用程序,我需要計算屏幕關閉和打開的次數以及何時關閉。 我創建了一個BroadcastReceiver,它應該在啟動后運行一個應該計數的服務。

這是我的服務班級:

public class MyService extends Service {

  private final IBinder mBinder = new MyBinder();
  public static boolean wasScreenOn = true;

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    //the next line is line 29
      if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        Log.i("Screen off", String.valueOf(System.currentTimeMillis()));
            wasScreenOn = false;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.i("Screen on", String.valueOf(System.currentTimeMillis()));
            wasScreenOn = true;
        }
      return Service.START_NOT_STICKY;
  }

  @Override
  public IBinder onBind(Intent arg0) {
  //TODO for communication return IBinder implementation
        return mBinder;
  }

  public class MyBinder extends Binder {
        MyService getService() {
          return MyService.this;
        }
      }

}

問題是我收到此錯誤:

06-26 23:16:38.485: E/AndroidRuntime(1402): FATAL EXCEPTION: main
06-26 23:16:38.485: E/AndroidRuntime(1402): java.lang.RuntimeException: Unable to start service com.MyApp.MyService@40ce0078 with Intent { cmp=com.MyApp/.MyService (has extras) }: java.lang.NullPointerException
06-26 23:16:38.485: E/AndroidRuntime(1402):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2673)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at android.app.ActivityThread.access$1900(ActivityThread.java:141)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at android.os.Looper.loop(Looper.java:137)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at android.app.ActivityThread.main(ActivityThread.java:5041)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at java.lang.reflect.Method.invokeNative(Native Method)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at java.lang.reflect.Method.invoke(Method.java:511)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at dalvik.system.NativeStart.main(Native Method)
06-26 23:16:38.485: E/AndroidRuntime(1402): Caused by: java.lang.NullPointerException
06-26 23:16:38.485: E/AndroidRuntime(1402):     at com.MyApp.MyService.onStartCommand(MyService.java:29)
06-26 23:16:38.485: E/AndroidRuntime(1402):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2656)

我想這是因為當服務啟動時,仍然沒有打開/關閉屏幕的意圖。 但是我希望該服務在后台運行並等待它。

我應該怎么做?

非常感謝!

您的問題是onStartCommand NullPointerException intentnull

文檔中

intent提供給startService(Intent)的Intent。 如果服務在其進程消失后正在重新啟動,並且它先前已返回除START_STICKY_COMPATIBILITY以外的任何內容,則該值為null。

在執行intent之前,應檢查null值。

我使用了此應用程序中的代碼后,它就開始工作了

碼:

public class HardwareTriggerService extends Service {
private HardwareTriggerReceiver hardwareTriggerReceiver;
@Override
public void onCreate() {
    super.onCreate();
    Log.e(">>>>>>", "HardwareTriggerService CREATED.");
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    hardwareTriggerReceiver = new HardwareTriggerReceiver();
    registerReceiver(hardwareTriggerReceiver, filter);
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.e(">>>>>>", "HardwareTriggerService DESTROYED.");
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);

    unregisterReceiver(hardwareTriggerReceiver);
}

@Override
public IBinder onBind(Intent intent) {
    return null;
}
}

暫無
暫無

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

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