2016-09-15 3 views
-2

Ich arbeite an einem benutzerdefinierten Launcher, wo ich versuche, die Zurück-Taste zu übersteuern, die nicht in der gewünschten Weise funktioniert.Zurück Button Override in benutzerdefinierten Launcher

Das Ziel dieses Launcher ist es, eine bestimmte App (vordefiniert) zu starten und die Liste der installierten Apps auf Backpress zu laden. Wenn dieser Launcher gestartet wird, startet er die gewünschte App, lädt aber die Liste der installierten Apps beim doppelten Backpress. Bei einem einzelnen Zurückdruck wird entweder der Benutzer zu einem schwarzen Bildschirm oder dem vorherigen Bildschirm (falls vorhanden) geführt, und auf einem anderen Zurückdruck wird eine Liste von Apps geladen. Ich habe keyCode und onBackPressed() verwendet.

Der Code ist unten.

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     Intent i = new Intent(this, AppListActivity.class); 

     startActivity(i); 

     this.finish(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

Antwort

0

Kommentar

return true;

Probieren Sie es aus und lassen Sie mich wissen .. Es funktioniert für mich

+0

Danke .. aber es funktioniert genauso wie zuvor. – SCode

+0

public boolean onKeyDown (int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Toast.makeText (this, "Test", Toast.LENGTH_SHORT) .show(); Absicht i = neue Absicht (this, sample2.class); startAktivität (i); this.finish(); // Rückkehr wahr; } // Rückgabe false; Rückgabe super.onKeyDown (Schlüsselcode, Ereignis); } Überprüfen Sie dies Seine wrking für mich und seine gleiche wie Ihre one –

+0

In meiner App ist die Absicht Schalter nicht in der gleichen App es wechselt zwischen zwei Apps, also nicht zwischen Aktivitäten, sondern auch zwischen Apps. – SCode

0

Dies könnte ein Duplikat this

Da ein backPress Mittel sein, hat eine Aktion und Doppeltippen man hat, müssen Sie eine Art Zähler haben, was auch eine Verzögerung bedeutet. Ich glaube, das ist, was Sie suchen, die von der Antwort im obigen Link inspiriert ist. Es wird eine Verzögerung von 500ms für eine einzelne BackPress geben. Ich hoffe es hilft.

Rewritten Ihre Bedürfnisse anzupassen, aber im Grunde, was ist, sagt:

boolean doubleBackToExitPressedOnce = false; 
private static final int PERIOD = 500; 

@Override 
public void onBackPressed(){ 
    if (doubleBackToExitPressedOnce) { 
     Intent i = new Intent(this, LoginActivity.class); 

     startActivity(i); 

     this.finish(); 
     return; 
    } 

    this.doubleBackToExitPressedOnce = true; 
    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      doubleBackToExitPressedOnce = false; 
      back(); 
     } 
    }, PERIOD); 
} 
public void back(){ 
    super.onBackPressed(); 
} 

EDIT: Ich glaube, ich falsch verstanden, was Sie tun wollten. Ich glaube, das sollte funktionieren, wenn Sie

ersetzen
Intent i = new Intent(this, LoginActivity.class); 
startActivity(i); 
this.finish(); 

mit

Intent launchIntent =  getPackageManager().getLaunchIntentForPackage("com.package.address"); 
if (launchIntent != null) { 
    startActivity(launchIntent); 
} 

und verwenden Sie die richtigen Paketnamen. Diese Antwort wurde gefunden here

+0

Danke für den Vorschlag. aber es funktioniert nicht. – SCode

+0

@SCode Wie wäre es jetzt? – MrLys

+0

In diesem Modul ist Szenario, ich bin derzeit auf andere App wo ich auf Backpress muss ich wieder in meiner App eingeben, d. H. In Aktivität meiner App eingeben.Nach dem Hinzufügen dieses Codes gibt es keine Operation auf Backpress, Bildschirm ändert sich nicht. – SCode

Verwandte Themen