2013-07-21 6 views
10

मेरे पास बच्चों के लिए एक आवेदन है और मैं नहीं चाहता हूं कि वे "हालिया ऐप्स" बटन पर क्लिक करें (वह एक जो दूसरे आय के ऊपर दो आयत की तरह दिखता हो)। मैं बैक बटन और होम बटन को कैप्चर करने का ख्याल रख रहा हूं और मैंने हालिया ऐप्स बटन को कैप्चर करने की कोशिश करने के बारे में बहुत कुछ खोजा है और पढ़ा है, लेकिन ज्यादातर कहते हैं कि आप ऐसा नहीं कर सकते हैं या जिस तरह से वे इसे संदिग्ध कर सकते हैं।एंड्रॉइड हालिया ऐप्स बटन

ऐप "किड्स प्लेस" एक दृश्य को पॉप अप करता है जो कहता है कि "एक्शन स्वीकृत नहीं है" और यदि आप हालिया ऐप्स बटन दबाते हैं तो यह आपको होम स्क्रीन पर रीडायरेक्ट करता है, यह काम करता है भले ही आप एक अलग ऐप में हों, तो कैसे वे यह कर रहे हैं?

कोई सुझाव, संकेतों की सराहना की जाएगी।

धन्यवाद।

+0

हाँ, मेरे पास होम स्क्रीन है और मैं इसका इरादा फ़िल्टर के साथ ख्याल रखता हूं। मेरा प्रश्न "हालिया ऐप्स" बटन के संबंध में है। – esse

+0

मुझे पता है कि यह कोई जवाब नहीं है, लेकिन अगर सब कुछ विफल हो जाता है तो आप उस ऐप को अपनाने का प्रयास कर सकते हैं और देख सकते हैं कि वे इसे कैसे करते हैं – Shmuel

+0

संबंधित: http://stackoverflow.com/questions/14574239/how-to-disable-the- हालिया-कार्य-ऐप्स-बटन-इन-एंड्रॉइड? rq = 1 – talkol

उत्तर

20

खोज और वर्तमान का सबसे अच्छा समाधान मैंने पाया कोडिंग के बहुत सारे के बाद निम्नलिखित है:

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

यह जरूरी है कि आप का उपयोग <uses-permission android:name="android.permission.GET_TASKS" />

इस दृष्टिकोण का उपयोग करते समय जब उपयोगकर्ता हाल ही के ऐप्स बटन दबाता है यह आपकी गतिविधि गतिविधि लाइफसाइकिल के माध्यम से निम्नानुसार जाएगी: पर रोकें -> onWindowFocusChanged -> onResume।

उपयोगकर्ता को व्यवहार प्रकट होता है कि हालिया ऐप्स बटन को दबाकर कोई प्रतिक्रिया नहीं है। नोट: मैंने पाया है कि यदि आप हालिया ऐप्स बटन को जल्दी से दबाते हैं तो यह संक्षिप्त समय के लिए उस दृश्य को प्रदर्शित करेगा।

यह सबसे अच्छा समाधान नहीं है, लेकिन यह एक स्टैब है। यदि आपके पास बेहतर समाधान है तो कृपया साझा करें।

+0

ट्रिकी, लेकिन यह क्या वादा करता है :) अच्छा काम! –

+0

यह लॉलीपॉप –

+0

"com.android.systemui.recent.RecentsActivity" पर काम नहीं करता है केवल एंड्रॉइड 4.2 - 4.4 के लिए है। अन्य एंड्रॉइड संस्करणों के लिए क्लासनाम के लिए मेरा उत्तर देखें। –

0

धन्यवाद निबंध उच्च एसडीके के लिए समाधान के लिए! मैनें इसे खो दिया।

लेकिन मेरे मामले में मैं कॉल नकल करने की जरूरत है (या प्रभाव अस्थिर है)

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

मुझे इसे फिर से देखना था और अस्थिर समस्या का सामना करना पड़ा, आपकी पोस्ट के लिए धन्यवाद। – esse

3

सबसे अच्छा तरीका है मैं पाया है यह करने के लिए है:

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/ 

यह मेरा खुद का कोड नहीं है , लेकिन यह हाल ही में ऐप सूची को दिखाने से छुपाता है।

+0

मैंने इसे आजमाया और यह मेरे लिए काम नहीं करता है, एसडीके> = 14 नेक्सस 7 पर। – esse

+2

भविष्य के संदर्भ के लिए: मेरा मानना ​​है कि यह केवल सैमसंग उपकरणों पर काम करता है। – Randy

+0

यह मेरे लिए काम करता है हाँ !!! – androidBoomer

0

आप सभी सिस्टम बटन अक्षम करने में रुचि रखते हैं, हो सकता है विकल्प प्रणाली बार पूरी तरह से मारने के लिए, Easy way to hide system bar on Android ICS

0

देखने के स्वीकार किए जाते हैं जवाब आप केवल Android 4.2 के लिए className उपयोग कर रहे हैं में हो सकता है - 4.4। यह 5.0 और उच्चतर, या एंड्रॉइड 4.1 पर काम नहीं करेगा।

  • Android 4.1:

    यहां मुख्य Android संस्करण के लिए classnames की सूची है "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 "(" एस "पत्र में जोड़ा गया था)

आप के लिए सबसे अच्छा समाधान सरल उपयोग सर्वी उपयोग करने के लिए किया जाएगा ce। onAccessibilityEvent() विधि ओवरराइड करें, उपरोक्त सूचीबद्ध क्लासनामों को फ़िल्टर करें और जब आप इस ईवेंट का पता लगाते हैं तो कुछ करें। उदाहरण के लिए 'होम' बटन दबाकर अनुकरण करें। आप सुलभता सेवा में वैश्विक कार्रवाई करके ऐसा कर सकते हैं।

संबंधित मुद्दे