私は常に一番上になるようにアクティビティを実装しています(一般的にロック画面を実装しています)。アルゴリズムは次のように単純です:
- アクティビティを開始
- すべてのハードウェア ボタンを無効にし、バックプレス、カメラ ロック、音量ボタンなどを無効にします。
- アクティビティが一時停止されるたびに、サービスを呼び出してアクティビティを確認して再開します。
ロジックについては、次の回答を参照してください。回答 1、回答 2 アクティビティが一時停止され、サービスによって再開されるたびに、6 ~ 7 秒の遅延があります。アクティビティの一時停止と再開の間のこの時間の遅延をどのように短縮できますか?
一時停止時および再開時コード:
protected void onPause() {
isFront = false;
Intent lockHelper = new Intent( this, LockHelper.class);
startService( lockHelper );
super.onPause();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
if(keyCode==KeyEvent.KEYCODE_CAMERA)
return true;
else if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN)
return true;
else if(keyCode==KeyEvent.KEYCODE_VOLUME_UP)
return true;
else if(keyCode==KeyEvent.KEYCODE_HOME)
return true;
else if(keyCode==KeyEvent.KEYCODE_POWER)
return true;
else
return true;
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent keyEvent) {
if(keyCode==KeyEvent.KEYCODE_HOME)
return true;
else if(keyCode==KeyEvent.KEYCODE_POWER)
return true;
else
return true;
}
@Override
public void onBackPressed() {
}
@Override
protected void onResume() {
isFront = true;
Intent lockHelper = new Intent( this, LockHelper.class);
startService( lockHelper );
super.onResume();
}
}
サービスは次のとおりです。
public class LockHelper extends Service {
@Override
public void onStart(Intent intent, int startId) {
if(Locker.isFront == false){
Intent locker = new Intent( this, Locker.class);
locker.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity( locker );
stopSelf();
}
}
public LockHelper() {
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
}