Android 无法从BroadcastReceiver启动/停止服务

Android 无法从BroadcastReceiver启动/停止服务,android,service,Android,Service,我有一个启动服务的活动。现在,我想在一个广播接收器中启动/停止服务,该接收器监听屏幕关闭/打开。我用过: public class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { Log.

我有一个启动服务的活动。现在,我想在一个广播接收器中启动/停止服务,该接收器监听屏幕关闭/打开。我用过:

public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        Log.d("Screen:", "In Method:  ACTION_SCREEN_OFF");
        context.stopService(new Intent(context, ScreenReceiver.class));
    } 
    else if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
        Log.d("Screen:", "In Method:  ACTION_USER_PRESENT");
        context.startService(new Intent(context, ScreenReceiver.class));
    }
}
}

我已添加所需的权限,并已在服务中注册/注销BroadcastReceiver。当我运行代码时,我能够在Logcat中看到日志消息,但服务似乎没有停止。我该怎么修?提前感谢。

您正在尝试重新启动BroadcastReceiver。
请改用服务类

context.startService(new Intent(context, ScreenReceiver.class));
应该是

context.startService(new Intent(context, YourService.class));
在您的清单文件中:

<service android:name=".YourService"></service>


要启动服务,请将服务名称而不是
ScreenReceiver
(BroadcastReceiver name)传递到
startService
作为第二个参数,并确保您已在AndroidManifest文件中添加了服务您的服务是如何定义的?stopService(新的意图(context,ScreenReceiver.class));第二个参数应该是YOURSERVICE.class他只是有点问题stopping@kevinhoo,无论如何,此代码都不会启动他的服务。也许他是从别的地方开始服务的。我把它改成了服务类。但问题依然存在。当我调用stopService()时,服务中的onDestroy()方法会被执行,对吗?是的,它应该被调用!你的服务有边界吗?没有。我没有使用有边界的服务。我想停止服务时,手机被锁定,我想启动它一旦解锁。但我猜这是不可能的,因为我看到很多文章都说onDestroy()不会立即调用。相反,它只在操作系统想要释放内存空间时才被调用。