Frage

Ich möchte den Bildschirm sperren. Ich möchte die Home-Taste deaktivieren, und verwenden Sie nur die Zurück-Taste. Wie kann ich das erreichen?

War es hilfreich?

Lösung

Mit dieser Methode kann die Home-Taste in android

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

Andere Tipps

Ich fand einen Weg, um die HOME-Taste zu bewältigen. Für Ihre Anwendung festgelegt, die es als

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

Jetzt ist Ihre Anwendung ist eine alternative Launcher-Anwendung.

Verwenden Sie die adb, und deaktivieren Sie die Launcher-Anwendung unter Verwendung von Paket-Manager

pm disable com.android.launcher2

Nun ist die Home-Taste drücken wird immer in dem gleichen Bildschirm bleiben.

Diese Lösung funktioniert nur auf 3.x auf.

Okay, war dies angeblich eine schwierige Frage sein. Aber hier ist ein Weg, um es zu knacken.

Ignoriere die folgende Methode in Ihrer Aktivität,

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

Und nun das Schlüsselereignis wie diese handhaben,

@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;
}

Fügen Sie diesen Code auf Ihre MainActivity Klasse:

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();
    }
}

Es ist keine Verriegelung für ‚Home‘ -Taste, aber Benutzer wechseln können nicht auf eine andere App für eine lange Zeit (mehr als 100 Millisekunden), vielleicht ist das, was Sie wollen.

So deaktivieren Sie Home-Taste, versuchen Sie dies:

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

Problem mit Benachrichtigungsleiste nach unten gezogen kann wie hier durch Versteck Benachrichtigungsleiste gelöst werden:

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

oder Set Vollbild-Thema für Ihre Aktivität oder Anwendung in manifest:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top