私は、シェイク時に画面をロックするアプリに取り組んでいます。このアプリは、アプリを開始および停止するための2つのボタンを持つメインアクティビティで構成されています。その後、放送受信機に入り、画面のオン/オフを確認してからサービスにリダイレクトします。最初の3〜4回はロックを振って完全にロックを解除し、その後は無期限に実行します。
私が使用している放送受信機は..
public void onReceive(Context context, Intent intent) {
System.out.println("Entered Broadcaste Reciever");
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
// DO WHATEVER YOU NEED TO DO HERE
wasScreenOn = "1";
System.out.println("Check"+"Screen went OFF");
Intent i = new Intent(context, UpdateService.class);
i.putExtra("screenstate", wasScreenOn);
context.startService(i);
System.out.println("jrkejhr keh");
}
else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// AND DO WHATEVER YOU NEED TO DO HERE
wasScreenOn = "2";
Log.i("Check","Screen went ONN");
System.out.println("Entering to the service.................");
Intent ScreenOnIntent = new Intent(context,UpdateService.class);
ScreenOnIntent.putExtra("screenstate", wasScreenOn);
context.startService(ScreenOnIntent);
}
}
そしてサービスは.....
public void onStart(Intent intent, int startId) {
System.out.println("Entered On Start");
data=intent.getStringExtra("screenstate");
System.out.println("Data from Broadcast Receiver is"+data);
mShaker = new ShakeListener(this);
mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
public void onShake()
{
if(data.equals("1"))
{
System.out.println(".............................................");
PowerManager TempPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock TempWakeLock = TempPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE, "TempWakeLock");
TempWakeLock.acquire();
final Vibrator vibe = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibe.vibrate(100);
}
else
{
final Vibrator vibe = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
System.out.println("The screen is off and is shaking.........");
vibe.vibrate(100);
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
ComponentName mAdminName = new ComponentName(UpdateService.this,LockActivity.class);
System.out.println("The Device device admin enabled");
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"onEnabled");
mDPM.lockNow();
mDPM.setMaximumTimeToLock(mAdminName,0);
intent.putExtra("force-locked", DeviceAdminInfo.USES_POLICY_FORCE_LOCK);
// startActivityForResult(intent, 1);
}
}
});
}
これを1回だけ実行したい..画面がオンの場合は1回実行して画面をオフにし、その逆も同様です。