Java Android:后台服务中屏幕关闭/打开时的帮助计数

Java Android:后台服务中屏幕关闭/打开时的帮助计数,java,android,android-intent,android-service,intentfilter,Java,Android,Android Intent,Android Service,Intentfilter,对于我正在使用的一个小应用程序,我需要计算屏幕关闭和打开的次数以及它何时关闭和打开。我创建了一个BroadcastReceiver,它在启动后运行一个服务,这个服务应该可以计算在内 这是我的服务课: public class MyService extends Service { private final IBinder mBinder = new MyBinder(); public static boolean wasScreenOn = true; @Override

对于我正在使用的一个小应用程序,我需要计算屏幕关闭和打开的次数以及它何时关闭和打开。我创建了一个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。意图是无效的

从:

意向提供给startServiceIntent的意向,如给定。今年五月 如果服务在其进程结束后重新启动,则返回null 他离开了,它以前除了 启动粘性兼容性


您应该先检查空值,然后再执行任何操作。

我在使用了

代码:

我试过这个:iContent.getExtras=null{if intent.getAction.equalsIntent.ACTION_SCREEN_OFF{Log.iScreen OFF,String.valueOfSystem.currentTimeMillis;wasScreenOn=false;}否则if intent.getAction.equalsIntent.ACTION_SCREEN_ON{Log.iScreen ON,String.valueOfSystem.currentTimeMillis;wasScreenOn=true;}但这仍然不起作用。
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;
}
}