0

I want to do a method when lock screen displayed (not when unlocked or screen on, just when lock screen displayed). i try with broadcast and services but they don't work after killing app. Also In eclips LogCat i see a log like /WindowManager(473): Lock screen displayed! that genymotion produce . maybe can be done with windowmanager..

mhk
  • 112
  • 1
  • 11
  • cant understand clearly. can you be more specific – Nabeel K Jan 01 '16 at 15:26
  • I want to run a method when android phones screen lock appear. I tested ACTION_SCREEN_ON as a broadcast, but it only works when the activity is live. I also tested ACTION_USER_PRESENT and it works when the phone is unlocked, but I want to run the method before unlocking (just when the screen lock appears). – mhk Jan 01 '16 at 15:44
  • In eclips logcat i see a log that WindowManager has produced ,and the log text is "Lock screen displayed!" . the log appear when the lock screen appear . and i whant to khow witch process produced that log and how it produced that log. – mhk Jan 01 '16 at 15:53

2 Answers2

0

Try something like the following:

KeyguardManager myKM = (KeyguardManager)
context.getSystemService(Context.KEYGUARD_SERVICE);

if( myKM.inKeyguardRestrictedInputMode()) {
    // it is locked
} 
else {
    // it is not locked
}

This should allow you to determine the locked status of the device.

Shane Duffy
  • 1,117
  • 8
  • 18
0

I found it. using service and set it START_STICKY. after killing service the service restart again. it is my code :

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

 </application>

service class :

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;


public class UpdateService extends Service {

    BroadcastReceiver mReceiver;


    @Override
    public void onCreate() {
        super.onCreate();
        // register receiver that handles screen on and screen off logic
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);

        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mReceiver = new MyReceiver();
        registerReceiver(mReceiver, filter);
    }


    @Override
    public void onDestroy() {

        unregisterReceiver(mReceiver);
        Log.i("onDestroy Reciever", "Called");

        super.onDestroy();
    }


    @Override
    public void onStart(Intent intent, 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");
            Toast.makeText(getApplicationContext(), "Sleep",
                    Toast.LENGTH_LONG)
                    .show();
        }
    }


    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }


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

receiver class :

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;


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;
            Log.i("screenLog", "screen off");

        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            screenOff = false;
            Log.i("screenLog", "screen on");
        }


    }
}

in StartupActivity :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


        Context context = getApplicationContext();
        Intent service = new Intent(context, UpdateService.class);
        context.startService(service);
}
mhk
  • 112
  • 1
  • 11