Android 听锁屏显示

Android listen to Lock screen displayed

我想在锁屏显示时做一个方法(不是在解锁或屏幕打开时,只是在锁屏显示时)。 我尝试使用广播和服务,但它们在终止应用程序后不起作用。 此外,在 eclips LogCat 中,我看到 genymotion 生成的 /WindowManager(473): Lock screen displayed! 之类的日志。 也许可以用 windowmanager..

来完成

尝试如下操作:

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

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

这应该允许您确定设备的锁定状态。

我找到了。 使用服务并设置它 START_STICKY。 杀死服务后,服务再次重新启动。 这是我的代码:

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

 </application>

服务 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;
    }
}

接收者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");
        }


    }
}

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