Android SDKでキーロック状態を取得する

test127.png
Androidアプリの実行中に今現在画面がロックされているかどうかのロック状態を調べるにはKeyguardManager:: inKeyguardRestrictedInputMode()を使う。trueならロック中、falseならロックされていない。

問題はロック/アンロックの検出。HTC Desireでは下のソースで検出できましたが、Androidエミュレーターでは検出できませんでした。また下のソースではアンロックの検出にフォーカス状態を利用しているので、フォーカスが一定しないアプリの場合は使えないはずです。 電源ボタンをハンドルすれば手動でのロック/アンロックは検出できるはずですが、そうすると今度はソフトウエア的なロックなどは検出できないはずですし、、、ということでロック/アンロックの検出方法は不明です。
package com.Test127;

import android.app.Activity;
import android.app.KeyguardManager;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;

public class Test127Act extends Activity
{
	private	KeyguardManager	_KeyguardManager;
	private	boolean			_bScreenLocked = false;
	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		_KeyguardManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
		_bScreenLocked = _KeyguardManager.inKeyguardRestrictedInputMode();
	}

	
	@Override
	public void	onPause()
	{
		super.onPause();

		_bScreenLocked = _KeyguardManager.inKeyguardRestrictedInputMode();
		if(_bScreenLocked)
		{
			//ロックされた
			//呼ばれないことあり
			Log.d("Test127","onPause() Locked!!! Do something ....");
		}
	}

	
	@Override
	public void	onWindowFocusChanged(boolean hasFocus)
	{

		super.onWindowFocusChanged(hasFocus);

		if(_bScreenLocked == true && hasFocus)
		{
			//アンロックされた
			//呼ばれないことあり
			Log.d("Test127","onWindowFocusChanged() Unlocked!!! Do something ....");
		}
		_bScreenLocked = _KeyguardManager.inKeyguardRestrictedInputMode();
	}
}


プロジェクトファイルをダウンロード

カテゴリー「android」 のエントリー