Java BroadcastReceiver-如何在每次用户打开/关闭屏幕时触发服务

Java BroadcastReceiver-如何在每次用户打开/关闭屏幕时触发服务,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,你好 我想检查我的服务是否正在运行,如果服务正在运行,什么也不做 但如果服务未运行,请重新启动该服务 所以我就这样做 Manifest.xml中的 <receiver android:name="com.varma.android.aws.receiver.Receiver"> <intent-filter> <action android:name="android.intent.action.SCREEN_ON" /> <catego

你好

我想检查我的服务是否正在运行,如果服务正在运行,什么也不做

但如果服务未运行,请重新启动该服务

所以我就这样做

Manifest.xml中的

<receiver android:name="com.varma.android.aws.receiver.Receiver">
<intent-filter>
    <action android:name="android.intent.action.SCREEN_ON" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
    <action android:name="android.intent.action.SCREEN_OFF" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
但当我打开/关闭屏幕时,什么也没有发生


我做错了什么?

如果你想让你的服务保持正常,你不需要这样做。只要让onstart命令返回START\u STICKY即可。这将导致Android在有足够内存时重新启动其停止的任何服务。

您无法通过清单文件注册屏幕开/关广播,tt不工作(需要探究原因)。 通过代码将其注册到您的主要活动中

    ifilter=new IntentFilter();
    ifilter.addAction(Intent.ACTION_SCREEN_OFF);
    ifilter.addAction(Intent.ACTION_SCREEN_ON);
    registerReceiver(new Receiver(), ifilter);
在您的活动保留在内存中之前,您将在您的接收器中接收这些广播,我已经对其进行了测试,并且能够接收广播。
但是,如果您的活动完成,您将无法接收这些广播。因此,使用START_STICKY功能在应用程序中的某个本地服务中注册这些广播将解决您的问题。

我已将其包含在
Service.java
中,但注意到发生了很多事情
    ifilter=new IntentFilter();
    ifilter.addAction(Intent.ACTION_SCREEN_OFF);
    ifilter.addAction(Intent.ACTION_SCREEN_ON);
    registerReceiver(new Receiver(), ifilter);