Как запустить приложение при разблокировке экрана? - PullRequest
0 голосов
/ 25 октября 2019

Я пробовал этот код, но он не работает. У кого-нибудь есть другое решение? Я пробовал много способов, таких как приведенный ниже, из Переполнения стека, но ни один из них не работает.

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 голосов
/ 25 октября 2019

Для прослушивания включения / выключения экрана ваше приложение должно запускаться по времени и программно регистрировать Broadcast receiver для ОС.

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);
...