Вопрос

Я хотел бы заблокировать экран. Я хочу отключить главный ключ и использовать только задний ключ. Как мне это сделать?

Это было полезно?

Решение

Используйте этот метод, чтобы отключить ключ дома в Android

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

Другие советы

Я нашел способ решать домашний ключ. Для вашего приложения установите манифест как

<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"/>

Теперь ваше приложение является альтернативным приложением для установки.

Используйте ADB и отключите приложение Launcher, используя менеджер пакетов

pm disable com.android.launcher2

Теперь нажатие клавиши дома всегда останется на одном экране.

Это решение работает только до 3.x.

Хорошо, это должно было быть тяжелым вопросом. Но вот способ взломать это.

Переопределить метод ниже в вашей деятельности,

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

И теперь обращайтесь к ключевому событию, как это,

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   if(keyCode == KeyEvent.KEYCODE_HOME)
    {
     Log.i("Home Button","Clicked");
    }
   if(keyCode==KeyEvent.KEYCODE_BACK)
   {
        finish();
   }
 return false;
}

Добавьте этот код на свой MainActivity класс:

Timer timer;
MyTimerTask myTimerTask;

@Override
protected void onResume() {
    super.onResume();

    if (timer != null) {
        timer.cancel();
        timer = null;
    }
}

@Override
protected void onPause()
{
    if (timer == null) {
        myTimerTask = new MyTimerTask();
        timer = new Timer();
        timer.schedule(myTimerTask, 100, 100);
    }

    super.onPause();
}

private void bringApplicationToFront()
{
    KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    if( myKeyManager.inKeyguardRestrictedInputMode())
        return;

    Log.d("TAG", "====Bringging Application to Front====");

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    try
    {
        pendingIntent.send();
    }
    catch (PendingIntent.CanceledException e)
    {
        e.printStackTrace();
    }
}

public void onBackPressed() {
    // do not call super onBackPressed.
}

class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        bringApplicationToFront();
    }
}

Это не кнопка «Дома», но пользователь не может переключаться на другое приложение в течение длительного времени (более 100 миллисекунд), возможно, это то, что вы хотите.

Чтобы отключить домашнюю кнопку, попробуйте это:

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

Проблема с вытянутой панелью уведомлений может быть решена путем скрытия панели уведомлений, как здесь:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.xxxx);
    getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN);
    ....
}

или установите полноэкранную тему для вашей деятельности или приложения в манифесте:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top