屏幕开启时调用服务(Android)

时间:2016-02-01 15:50:12

标签: android service lockscreen

我正在创建一个带面部识别功能的锁屏应用。作为第一步,我创建了一个简单的锁屏,可以在@Override protected void dispatchSetPressed(boolean pressed) { super.dispatchSetPressed(pressed); invalidate(); } 点击时解锁。锁定屏幕应在Button开启Switch时启动。我创建了一个MainActivity来启动我的锁屏活动,但是一旦关闭然后打开我的屏幕,活动就不再显示了。 我是android的初学者,不知道该怎么做。如果能得到一些帮助,我会很高兴。

java文件是:

MainActivity.java

Service

DroidLockerService.java

package com.sanket.droidlockersimple;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;

public class MainActivity extends ActionBarActivity {

    private Switch enableLocker;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        enableLocker = (Switch) findViewById(R.id.enableLocker);
        enableLocker.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(enableLocker.isChecked()) {
                    Intent intent = new Intent(MainActivity.this, DroidLockerService.class);
                    startService(intent);
                }
            }
        });
    }
}

LockScreen.java

package com.sanket.droidlockersimple;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class DroidLockerService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Intent intent1 = new Intent(this, LockScreen.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent1);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

1 个答案:

答案 0 :(得分:1)

我相信您需要的是BroadcastReceiver

您正在运行服务,但有些事情需要告诉服务屏幕已打开或关闭。 Android通过在发生某些事情(即接收电话,打开系统等)时发出广播事件来实现此目的。任何已包含相关BroadcastIntent的已注册广播接收者将被告知事件已发生。

然后,您的广播接收者可以告诉您的服务该事件已经发生,您的服务可以做出适当的响应。

我认为您需要注册的特定广播事件是" ACTION_SCREEN_ON"和" ACTION_SCREEN_OFF"。有关详细信息,请参阅Intent开发人员参考页。

另请阅读Android中的意图和意图过滤器developer guide,这里是BroadcastReceiver参考页面。 (StackOverflow赢了但是我发布了超过2个链接......只是在Android开发者网站上搜索它。)