Aqib Abbas
Aqib Abbas

Reputation: 25

How to launch an app when the screen unlocks?

I have tried this code but it's not working. Does anybody have any different solution? I have tried many ways like the below one from Stack Overflow but none of them is working.

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

Upvotes: 0

Views: 301

Answers (1)

Harry T.
Harry T.

Reputation: 3527

To listen to screen on/off, your app should run by time and register Broadcast receiver to OS programmatically.

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.

    }
}

Start service in activity

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

Upvotes: 1

Related Questions