Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测屏幕锁定的服务:";“无法启动服务意图”;_Android_Android Service_Android Broadcastreceiver - Fatal编程技术网

Android 检测屏幕锁定的服务:";“无法启动服务意图”;

Android 检测屏幕锁定的服务:";“无法启动服务意图”;,android,android-service,android-broadcastreceiver,Android,Android Service,Android Broadcastreceiver,我正在尝试捕捉设备屏幕何时关闭或打开。我看着这个答案。但是我还没有完全弄明白。当我测试它时,我收到一条警告,说无法创建服务:无法启动服务意图。。。找不到。我是服务新手,所以我希望有人能检查一下代码,看看我做错了什么。这是我的接收器和服务: public class MyReceiver extends BroadcastReceiver { private boolean screenOff; @Override public void onReceive(Context context, I

我正在尝试捕捉设备屏幕何时关闭或打开。我看着这个答案。但是我还没有完全弄明白。当我测试它时,我收到一条警告,说无法创建服务:
无法启动服务意图。。。找不到。
我是服务新手,所以我希望有人能检查一下代码,看看我做错了什么。这是我的
接收器
服务

public class MyReceiver extends BroadcastReceiver {
private boolean screenOff;

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        screenOff = true;
        Home.locked = true;
        Log.i("screenstate", "off");
    } else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        Log.i("screenstate", "on");

    }else if(intent.getAction().equals(Intent.ACTION_ANSWER)) {

    }
    Intent i = new Intent(context, UpdateService.class);
    i.putExtra("screen_state", screenOff);
    context.startService(i);
}}
服务:

public class UpdateService extends Service {
BroadcastReceiver mReceiver;
Boolean isRunning;
Context context;
Thread backgroundThread;
@Override
public void onCreate() {
    super.onCreate();
    context = this;
    isRunning = false;
    // register receiver that handles screen on and screen off logic
    Log.i("UpdateService", "Started");
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_ANSWER);
    mReceiver = new MyReceiver();
    registerReceiver(mReceiver, filter);
}

@Override
public void onDestroy() {
    unregisterReceiver(mReceiver);
    isRunning = false;
    super.onDestroy();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    boolean screenOn = intent.getBooleanExtra("screen_state", false);
    if (!screenOn) {
        Log.i("screenON", "Called");
        Toast.makeText(getApplicationContext(), "Awake", Toast.LENGTH_LONG)
                .show();
    } else {
        Log.i("screenOFF", "Called");
    }
    return START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    return null;
}}
以下是我的主要活动:

public class Home extends Activity {
static boolean locked = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    startService(new Intent(Home.this, UpdateService.class));
    if(locked)
        setContentView(R.layout.activity_home2);
    else
        showApps(null);
}

public void showApps(View v){
    locked = false;
    Intent i = new Intent(this, AppsList.class);
    startActivity(i);
}}

提前感谢。

看起来该服务尚未在清单文件中声明。在
标记中添加其声明:

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


您在清单中声明了服务吗?我没有在清单中声明它。。。我也不知道如何正确地做。我不知道清单需要什么样的信息。我只需要补充一下吗?现在看来效果不错。谢谢