Как отключить ключ HOME для приложения запуска Android

Можно ли скрыть / отключить домашний ключ устройства для приложения блокировки экрана. Я устал создавать пример приложения блокировки экрана, я сделал следующий процесс тестирования,

  1. Экран устройства выключен
  2. Нажал кнопку поиска - появится экран блокировки и ничего не произойдет
  3. Нажата кнопка "Назад" - появится экран блокировки и ничего не произойдет
  4. Нажал кнопку меню - появится экран блокировки и ничего не произойдет
  5. Нажата кнопка "Домой" - экран блокировки будет удален и перенаправлен на домашнюю страницу устройства.

В моем файле manifest.xml есть

<activity
            android:name=".SampleLock"
            android:excludeFromRecents="true"
            android:label="@string/app_name"
            android:launchMode="singleInstance"
            android:persistent="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <!-- <category android:name="android.intent.category.MONKEY" /> -->
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Ребята есть идеи, чтобы решить эту проблему?

2 ответа

Для отключения кнопки "Домой" просто добавьте это разрешение в свой Manifest.xml:

<использует-разрешение android: name = "android.permission.GET_TASKS" />

Для отключения кнопки "Недавние" добавьте этот код в свой основной вид деятельности:

@Override 
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (!hasFocus) {
        windowCloseHandler.post(windowCloserRunnable);
    }
}
private void toggleRecents() {
    Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");
    closeRecents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    ComponentName recents = new ComponentName("com.android.systemui", "com.android.systemui.recent.RecentsActivity");
    closeRecents.setComponent(recents);
    this.startActivity(closeRecents);
}
private Handler windowCloseHandler = new Handler();
private Runnable windowCloserRunnable = new Runnable() {@Override public void run() {
    ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
    ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
    if (cn != null && cn.getClassName().equals("com.android.systemui.recent.RecentsActivity")) {
        toggleRecents();
    }
}
};

Уберите эту строку из вашего замедления

<category android:name="android.intent.category.LAUNCHER" />

Это должно быть

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Другие вопросы по тегам