2013-07-21 26 views
10

Çocuklar için bir uygulama hazırlıyorum ve "Son Uygulamalar" düğmesini (birbiri üstüne iki dikdörtgen gibi görünen) tıklayabilmelerini istemiyorum. Geri düğmesini ve ana düğmeyi yakalamaya çalışıyorum ve Son Uygulamalar düğmesini çekmeye çalışmakla ilgili çok fazla araştırma yaptım ve okudum, ancak çoğunun yapamayacağınızı veya yaptıklarının çok tartışılabilir olduğunu söylüyorsunuz.android son uygulamalar kesiştirme butonu

App "Kids Place", "Action Not Allowed" (İzin Verilmeyen) yazan ve yeni bir uygulamaya girmiş olsanız bile bu durumun Ana Ekran'a yönlendirilmesini sağlayan bir görünüm açılır. Bunu yapıyorlar?

Herhangi bir öneri, ipuçları takdir edilecektir.

Teşekkürler. arama ve buldum mevcut en iyi çözüm kodlama çok sonra

+0

Evet, bir ana ekranım var ve bunu bir amaç süzgeci ile hallediyorum. Sorum şu "Son Uygulamalar" düğmesiyle ilgili. – esse

+0

Bunun bir cevap olmadığını biliyorum, ancak tüm bunlar başarısız olursa, uygulamayı açarak decompiling yapmayı deneyebilir ve nasıl yaptıklarını görebilirsiniz – Shmuel

+0

İlgili: http://stackoverflow.com/questions/14574239/how-to-disable-the- son görevler-apps-button-in-android? rq = 1 – talkol

cevap

20

şudur:

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

Bu kullanmanızı gerektirir

<uses-permission android:name="android.permission.GET_TASKS" /> kullanıcı son uygulamalar düğmesine bastığında bu yaklaşımı kullanarak o etkinliğinizin aşağıdaki gibi etkinlik yaşam döngüsünden geçmesine neden olur: onPause -> onWindowFocusChanged -> onResume.

Kullanıcıya, davranış, son uygulamalar düğmesine basmanın yanıt vermediği görünüyor. NOT: Son uygulamalar düğmesine hızlıca basarsanız, kısa bir süre için bu görünümü göstereceğini buldum.

Bu en iyi çözüm değil, ama bir bıçak. Daha iyi bir çözümün varsa lütfen paylaşın.

+0

Zor, ama ne söz veriyor :) güzel iş! –

+0

Lollipop –

+0

üzerinde çalışmıyor "com.android.systemui.recent.RecentsActivity" sadece Android 4.2 - 4.4 içindir. Diğer Android sürümleri için ClassNames için yanıtımı gör. –

0

teşekkürler esse Daha yüksek SDK çözümü için! Özledim

public class BaseActivity extends Activity { 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 

      Log.d("Focus debug", "Focus changed !"); 

     if(!hasFocus) { 
      Log.d("Focus debug", "Lost focus !"); 

      Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
      sendBroadcast(closeDialog); 
     } 
    } 
}// all credit goes here: http://www.juliencavandoli.com/how-to-disable-recent-apps-dialog-on-long-press-home-button/ 

Bu benim kendi kodu değil:

Ama benim durumumda ben çağrıyı çoğaltmak gerekir

 if (SDK>15){ 
      windowCloseHandler.postDelayed(windowCloserRunnable, 10); 
      windowCloseHandler.postDelayed(windowCloserRunnable, 300); 
     } 
+0

Bunu tekrar ziyaret ettim ve kararsız konuyla karşılaştım, gönderileriniz için teşekkürler. – esse

3

bulduğum en iyi yolu bunu yapmak için (veya etki kararsız) Ancak bu sadece son uygulamaların gösterilmesini gizler.

+0

Bunu denedim ve benim için çalışmaz, Nexus 7'de SDK> = 14. – esse

+2

Gelecekte başvurmak için: Bunun sadece Samsung cihazları üzerinde çalıştığına inanıyorum. – Randy

+0

Benim için çalışıyor evet! – androidBoomer

0

tüm sistem düğmeleri devre dışı bırakma ilgileniyorsanız, seçenek, tamamen sistem çubuğunu öldürmek yalnızca Android 4.2 için SınıfAdı kullandığınız kabul cevap olarak Easy way to hide system bar on Android ICS

0

görmek olacaktır olabilir - 4.4. 5.0 ve üstü veya Android 4.1'de çalışmayacaktır.

  • Android 4.1: Burada

    ana Android sürümleri için sınıf isimlerinin listesi "com.android.internal.policy.impl.RecentApplicationsDialog"
  • Android 4,2-4,4: "com.android. systemui.recent.RecentsActivity"
  • Android 5,0-7,1: "com.android.systemui.recents.RecentsActivity"("s" harfi eklendi)

sizin için en iyi çözüm Erişilebilirlik Servi yararlanmak olacaktır ce. onAccessibilityEvent() yöntemini geçersiz kılın, yukarıda listelenen Sınıf İsimlerini filtreleyin ve bu olayı algıladığınızda bir şeyler yapın. Örneğin 'Ana Sayfa' düğmesine basmayı simüle edin. Erişilebilirlik Hizmetinde küresel bir eylem yaparak bunu yapabilirsiniz.

İlgili konular