Вопрос:

Отключить домашнюю кнопку - Android

android

211 просмотра

2 ответа

26 Репутация автора

Я разрабатываю приложение, используя VOIP. Во время звонка я не хочу, чтобы пользователь переходил на домашний экран. Я отключил нажатие кнопки «назад», переопределив метод onbackpressed. Но я не могу понять, как отключить кнопку домой.

я пытался

    public void onAttachedToWindow()
    {  
         this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
         super.onAttachedToWindow();  
    }

Но это бросает мне исключение. Я хочу, чтобы код работал во всех версиях Android.

Заранее спасибо.

Автор: user1677237 Источник Размещён: 19.03.2015 06:18

Ответы (2)


2 плюса

3648 Репутация автора

На самом деле вы не можете сделать это, как для кнопки питания тоже. Это системные кнопки, к которым пользователь всегда должен иметь доступ, независимо от целей приложений. Представьте, что ваше приложение зависло (зависло) или потеряло подключение к Интернету. Все устройство будет заблокировано, потому что пользователь не может вернуться в главное меню. Единственный способ для пользователя - это выключить устройство. Так что это отключено архитектурой системы Android. Даже приложения по умолчанию для вызовов и VoIP не делают этого, попробуйте также следовать этому правилу. Кроме того, многие производители по-разному реализуют свою кнопку в зависимости от оборудования, поэтому эта кнопка имеет другое поведение. Что касается альтернативы, вы можете установить активность в полноэкранном режиме и показывать предупреждающее сообщение пользователя, а не закрывать приложение, когда делаете вызов. Надеюсь, поможет.

Автор: VadymVL Размещён: 19.03.2015 06:33

0 плюса

81 Репутация автора

Это возможно, но ваше приложение должно быть подписано системным ключом. Я декомпилировал приложение мастера и нашел пример кода, который отключает кнопку «Домой». Я использовал этот код в своем приложении-мастере, но не могу гарантировать, что он будет работать везде. Я проверял этот код на STB с Android 5, 6 и 7.

    private void disableHomeButton(Context context){
    ContentResolver contentResolver = context.getContentResolver();
    try {
        if (Build.VERSION.SDK_INT < 17) {
            Settings.System.putInt(contentResolver, Settings.System.DEVICE_PROVISIONED, 0);
        } else {
            Settings.Global.putInt(contentResolver, Settings.Global.DEVICE_PROVISIONED, 0);
        }
        Settings.Secure.putInt(contentResolver, Settings.Secure.USER_SETUP_COMPLETE, 0);
    }
    catch(SecurityException e){

    }
}

private void enableHomeButton(Context context){
    ContentResolver contentResolver = context.getContentResolver();
    try {
        if (Build.VERSION.SDK_INT < 17) {
            Settings.System.putInt(contentResolver, Settings.System.DEVICE_PROVISIONED, 1);
        } else {
            Settings.Global.putInt(contentResolver, Settings.Global.DEVICE_PROVISIONED, 1);
        }
        Settings.Secure.putInt(contentResolver, Settings.Secure.USER_SETUP_COMPLETE, 1);
    }
    catch(SecurityException e){

    }
}

AndroidManifest.xml

<manifest 
xmlns:android="http://schemas.android.com/apk/res/android"
package="tv.test.wizard"
android:sharedUserId="android.uid.system">

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />


....

Автор: Pavel Bobkov Размещён: 12.06.2019 09:26
Вопросы из категории :
32x32