屏幕解锁时如何启动应用程序?

时间:2019-10-25 17:02:53

标签: android broadcastreceiver screen-lock

我已经尝试过此代码,但无法正常工作。有人有其他不同的解决方案吗?我已经尝试了很多类似Stack Overflow的以下方法,但是没有一种起作用。

manifest.xml

 <receiver android:name=".ScreenReceiver">
 <intent-filter>
 <action android:name="android.intent.action.SCREEN_OFF"/>
 <action android:name="android.intent.action.SCREEN_ON"/>
 </intent-filter>
 </receiver>

screenreceiver

  public class ScreenReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
         if (intent.getAction().equals(Intent.ACTION_SCREEN_ON))
         {
            Intent intent = new Intent();  
            intent.setClass(context, ScreenLockActivity.class);
            startActivity(intent);          
         }
    }
}

1 个答案:

答案 0 :(得分:0)

要监听屏幕的开/关,您的应用应按时间运行,并以编程方式将Broadcast receiver注册到OS。

ScreenOnOffService.java

public class ScreenOnOffService extends Service {

    public IBinder onBind(Intent intent) {
        return null;
    }

    public void onCreate() {
        super.onCreate();
        Log.i("ScreenOnOffService", "onCreate: ");
        IntentFilter intentFilter = new IntentFilter();
//        intentFilter.addAction("android.intent.action.SCREEN_OFF");
        intentFilter.addAction("android.intent.action.SCREEN_ON");
        registerReceiver(ScreenOnReceiver.newInstance(), intentFilter);
    }

    public void onDestroy() {
        super.onDestroy();
        Log.i("ScreenOnOffService", "onDestroy: ");
        unregisterReceiver(ScreenOnReceiver.newInstance());
//        startService(new Intent(this,ScreenOnOffService.class));
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return Service.START_STICKY;
    }

}

ScreenOnReceiver.java

public class ScreenOnReceiver extends BroadcastReceiver {

    public static final String TAG = "ScreenOn";
    public static volatile ScreenOnReceiver screenOn;

    public static ScreenOnReceiver newInstance() {
        if (screenOn == null) {
            screenOn = new ScreenOnReceiver();
        }
        return screenOn;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("hieuN", "intent: " + intent.getAction());
        // do work. start activity.

    }
}

在活动中启动服务

Intent service = new Intent(this, ScreenOnOffService.class);
startService(service);