Back Taste long pressed

Fr4gg0r

Fr4gg0r

App-Anbieter (Werbung)
465
Hi,
ich würde es gerne abfangen wenn die Back oder Menü Taste lange gedrückt wird.
Das Problem, ich möchte nur long pressed events abfangen, denn ich arbeite grade an einem Spiel, bei dem man öfters auf diese Tasten kommt (zumindest auf meinem Galaxy S :p).

Blöderweise wird onKeyLongPress nur aufgerufen, wenn onKeyDown false zurückgeliefert hat (onKeyUp genauso).
Weiß da jemand einen funktionierenden Workaround?:o
 
Ich verstehe dein Problem glaub ich gerade nicht... Kannst du nicht einfach onKeyDown überschreiben und immer false zurückgeben lassen?
 
Dann führt das einmalige Berühren der Back Taste jedoch zum sofortigen Schließen der Activity.
 
Vielleicht hilft dir das hier:
Android Developers Blog: Back and other hard keys: three stories

To enable the new behavior in your app you must set android:targetSdkVersion in your manifest to 5 or greater.
nicht vergessen, dann


@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_CALL) {
// a long press of the call key.
// do our work, returning true to consume it. by
// returning true, the framework knows an action has
// been performed on the long press, so will set the
// canceled flag for the following up event.
return true;
}
return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_CALL && event.isTracking()
&& !event.isCanceled()) {
// if the call key is being released, AND we are tracking
// it from an initial key down, AND it is not canceled,
// then handle it.
return true;
}
return super.onKeyUp(keyCode, event);
}
Note that the above code assumes we are implementing different behavior for a key that is normally processed by the framework. If you want to implement long presses for another key, you will also need to override onKeyDown to have the framework track it:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_0) {
// this tells the framework to start tracking for
// a long press and eventual key up. it will only
// do so if this is the first down (not a repeat).
event.startTracking();
return true;
}
return super.onKeyDown(keyCode, event);
}

Ich hoffe mal das klappt!


Edit: Das Codebeispiel entspricht auch
http://developer.android.com/reference/android/view/KeyEvent.Callback.html#onKeyLongPress(int, android.view.KeyEvent)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Fr4gg0r
jo danke klappt! :)

Also in
-onKeyDown() true zurückgeben aber gleichzeitg event.startTracking(); aufrufen
-in onKeyUp() wieder true zurückgeben
-inKeyLongPress() nun das gewünschte ausführen.
 

Ähnliche Themen

A
Antworten
3
Aufrufe
689
swa00
swa00
MES
Antworten
10
Aufrufe
849
MES
MES
A
Antworten
1
Aufrufe
650
swa00
swa00
Zurück
Oben Unten