Как отключить кнопку "Недавние задачи/приложения"
Я создаю приложение для воспроизведения детей для Android. Мне нужно отключить все ключи, когда он используется.
Я установил приложение в качестве домашнего приложения и отключил задний ключ (который заботится о кнопке "Домой" и "Назад" ).
Чтобы очистить список недавних задач, я создал список Dummy Activites, которые запускаются, а затем завершаются, когда приложение запускается. Элементы Dummy Activites выглядят так:
public class Dummy1 extends Activity
{
public void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
finish();
}
}
И затем в моем onCreate приложения я выполняю:
this.pm.setComponentEnabledSetting(new ComponentName(this, Dummy1.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Intent localIntent1 = new Intent(this, Dummy1.class);
localIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(localIntent1);
Это позаботится, когда кто-то пытается удерживать клавишу "Домой", чтобы отображать последние задачи, когда я создаю 8 из них, и все они пусты, поэтому пользователь не может щелкнуть, чтобы изменить приложения.
Теперь единственной кнопкой, которую я не могу отключить, является кнопка "Недавние задачи/приложения" (доступны в основном устройства HTC, т.е. один X, один S и т.д.). Кажется, что эта кнопка все еще поднимает все последние задачи (хотя мои фиктивные задачи были созданы), и я не могу найти "крючок" для события, которое запускается при нажатии этой кнопки?
Примечание. Я знаю, что это возможно, поскольку такие приложения, как ToddlerLock, сделали это... Я просто не могу понять это.
Ответы
Ответ 1
Это закроет диалог RecentActivity. Поместите его в свой класс активности.
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!hasFocus) {
windowCloseHandler.postDelayed(windowCloserRunnable, 250);
}
}
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();
}
}
}
В манифесте вам нужно будет сделать следующее разрешение.
<uses-permission android:name="android.permission.GET_TASKS" />
Ответ 2
Вы пробовали этот код?
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.d("Focus debug", "Focus changed !");
if(!hasFocus) {
Log.d("Focus debug", "Lost focus !");
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
}
}
От: http://www.juliencavandoli.com/how-to-disable-recent-apps-dialog-on-long-press-home-button/
Ответ 3
На самом деле вы не можете отключить кнопку задачи. Когда вы нажимаете его, ваша деятельность вызывает метод onPause()
, и вы можете перенести свою задачу на фронт в этом методе. См. Мой ответ для соответствующего вопроса.
Ответ 4
Насколько я знаю, вы не можете переопределить поведение кнопки home (например, как вы можете переопределить поведение кнопки BACK) без подтверждения пользователем. Другими словами, по умолчанию приложение, которое в настоящее время обрабатывает кнопку "домой" - то есть текущую домашнюю панель запуска, - сначала нужно очистить.
Ответ 5
Вы можете отключить всплывающие окна StatusBar:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
try {
if (!hasFocus) {
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusbarManager.getMethod("collapse");
collapse.setAccessible(true);
collapse.invoke(service);
}
} catch (Exception e) {
Log.e(TAG, "onWindowFocusChanged - " + e.getCause());
}
}
Также вы должны добавить это разрешение в AndroidManifest.xml
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
Надеюсь, что это поможет.