Recents Taste sperren

  • 5 Antworten
  • Letztes Antwortdatum
H

heribert31

Neues Mitglied
0
Hallo

Ich programmiere OpenSource.

Ich will dass die Recents Taste entweder nicht mehr angezeigt wird oder besser dass sie gar nicht mehr funktioniert. Bei der App Surelock oder Sitekiosk funktioniert das auf unterschiedliche Art. Das muss auch ohne rooten gehen.

Im Internet gibt es verschiedene Ansätze. Aber entweder sie funktionieren nur manchmal oder gar nicht. Und der eine Ansatz, der manchmal funktioniert funktioniert mit einer Methodik die doof ist, weil das Recents-Menü für eine Sekunde doch noch angezeigt wird.

http://www.juliencavandoli.com/how-to-disable-recent-apps-dialog-on-long-press-home-button/
http://stackoverflow.com/questions/17769367/android-intercept-recent-apps-button

Die App Surelock zeigt beim clicken auf die Recents Taste folgendes an:
Surelock blocked: com.android.systemui
com.android.systemui.recent.RecentsAcitivity

Kann man irgendwie programmfremde Activities sperren?
 
Zuletzt bearbeitet:
Nee damit habe ich das am Anfang versucht. Das geht prinzipiell nicht. Bei allen anderen Tasten würde das so funktionieren, aber bei der Recents Taste geht das nicht. Google sei dank :/ .

EDIT:
Das geht selbst dann nicht, wenn es ausgeführt wird, egal welche Taste gedrückt wurde.

EDIT:
Kann man nicht irgendwie Appfremde Activities vorm plötzlichen starten blocken, also damit auch dieses Recentsmenü?
Oder Prozesse blocken?
Gibts da auch Kernelhooks, die feuern, wenn ein Prozess oder eine Activity gestartet wurde?
Oder hat jemand zumindest Ideen, wie man das lösen könnte?
 
Zuletzt bearbeitet:
Ich habe mal den Android Quellcode gelesen und herausgefunden, dass ab Android 4.2 bis 4.4 und vielleicht auch demnächst danach die Recentsactivity existiert und ein Intent empfangen kann, das die Recentsansicht deaktiviert oder so. Vor 4.2 existiert zwar ein Package recent oder recents oder so mit Klassen drin, aber ne Activity habe ich da nicht drin gesehen. Frage mich wie das damals ohne Activity überhaupt ging. Naja egal.

Problem ist damit noch nicht ganz gelöst, aber ich bin jetzt zumindest auf einer heißen Spur!
 
So jetzt muss ich com.android.systemui.recent.RecentsActivity
importen, aber da meckert eclipse ... nach vielen Minuten googlen bin ich darauf gekommen:
A way to import system files into Eclipse without errors (Android)? : Android Community - For Application Development

Otherwise, you will have to fix each and every dependency yourself, by hand, for those dependencies that can indeed be fixed.
Also mit anderen Worten, ich soll das nicht machen, und wenn ichs mache, dann müsste ich alle irgendwelche Abhängigkeiten behandeln.

So aber ich denke mir, dass die eine Kiosk App Surelock das doch auch konnte. Ich solls zwar nicht tun, aber verdammt der hätte trotzdem mal erklären können wie es trotzdem gehen würde, auch wenn mans nicht tun soll. Mir bleibt keine andere Wahl!
 
Hier ist ja ein Lösungsansatz:
android intercept recent apps button - Stack Overflow

Code:
   @Override public void onWindowFocusChanged(boolean hasFocus) {     super.onWindowFocusChanged(hasFocus);      if (!hasFocus) {         windowCloseHandler.postDelayed(windowCloserRunnable, 0);     } }  private void toggleRecents() {     Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");     closeRecents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);     ComponentName recents = new ComponentName("com.android.systemui", "com.android.systemui.recent.RecentsActivity");     closeRecents.setComponent(recents);     this.startActivity(closeRecents); }  private Handler windowCloseHandler = new Handler(); private Runnable windowCloserRunnable = new Runnable() {     @Override     public void run() {         ActivityManager am = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);         ComponentName cn = am.getRunningTasks(1).get(0).topActivity;          if (cn != null && cn.getClassName().equals("com.android.systemui.recent.RecentsActivity")) {             toggleRecents();         }     } }
Das funktioniert auch, aber leider nicht immer, sondern nur meistens oder machmal.
Und außerdem ist das nicht akzeptabel, dass das Recentsmenü angezeigt wird.

Hier ist der Code der Recentsactivity von Android:
GC: RecentsActivity - com.android.systemui.recent.RecentsActivity (.java) - GrepCode Class Source

Da gibt es nicht nur wie in dem Codebeispiel hier das:
Code:
String TOGGLE_RECENTS_INTENT = "com.android.systemui.recent.action.TOGGLE_RECENTS";
sondern auch das:
Code:
String CLOSE_RECENTS_INTENT = "com.android.systemui.recent.action.CLOSE";
Und ich glaube letzteres ist das was ich suche.

In dem Codebeispiel hier steht:
Code:
Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");
daraus habe ich einfach mal
Code:
Intent closeRecents = new Intent("com.android.systemui.recent.action.CLOSE");
aber das hat dazu geführt, dass es gar nicht mehr ging.

Hat jemand einen Rat?

Wo sind eigentlich die Manifestdateien im Android Betriebssystem Source?

Würde dieses Buch mir weiterhelfen?
http://www.packtpub.com/learning-android-intents/book
 
Zurück
Oben Unten