2016-08-12 7 views
6

एंड्रॉइड के सभी संवादों को अवरुद्ध करें, इसका मतलब है कि मेरी सेवा चलने तक ऐप या एंड्रॉइड सिस्टम में से कोई भी संवाद दिखाई नहीं देगा। क्या प्रोग्रामेटिक तरीके से ऐसा करने का कोई तरीका है?सेवा में संवाद अवरुद्ध करना प्रारंभ करें

उत्तर

0

मुझे नहीं लगता कि सभी पॉपअप को अवरुद्ध करना संभव है।

मेरे लिए यह समझ में आता है कि एंड्रॉइड सामान्य रूप से इसकी अनुमति नहीं देता है।

लेकिन आप अपने ऐप को Accessibility Service बनाने के लिए कोशिश कर सकते हैं (यदि आप वास्तव में चाहते हैं :)) जो पॉपअप प्रदर्शित पर प्रतिक्रिया करेगा और तुरंत इसे बंद कर देगा। पॉपअप को बंद करने के लिए आप उस पर कुछ रद्द करें बटन पा सकते हैं और क्लिक या performGlobalAction(GLOBAL_ACTION_BACK); (यदि इसे रद्द करने योग्य) कर सकते हैं।

एक पॉपअप के लिए यहां कुछ कोड की जाँच करें: Android unable read window content on few devices using accessibility service (मुझे लगता है कि अगर काम करेंगे पता नहीं है)

आप भी इस की समीक्षा किसी दृश्य का पता लगाने के लिए पर कुछ अधिक प्रेरणा मिलती है और पर क्लिक करता है बनाने के लिए कर सकते हैं सरल उपयोग सेवा के साथ किसी भी अनुप्रयोग: Programmatically enabling/disabling accessibility settings on Android device


संपादित: कुछ अधिक जानकारी के

आप servic जोड़ने के लिए इस मानक ट्यूटोरियल का पालन करना होगा अपने अनुप्रयोग के लिए ई: https://developer.android.com/training/accessibility/service.html

नोट करने के लिए

पहली बात यह है कि आप एक्सएमएल विन्यास उपयोग करने का निर्णय और ट्यूटोरियल में तरह android:canRetrieveWindowContent="true" शामिल होना चाहिए है:

<accessibility-service 
android:accessibilityEventTypes="typeViewClicked|typeViewFocused" 
android:packageNames="com.example.android.myFirstApp, com.example.android.mySecondApp" 
android:accessibilityFeedbackType="feedbackSpoken" 
android:notificationTimeout="100" 
android:settingsActivity="com.example.android.apis.accessibility.TestBackActivity" 
android:canRetrieveWindowContent="true" 
/> 

और मुझे लगता है कि आप लाइन की जरूरत नहीं होगी android:packageName

तो फिर तुम प्रयोग करने के लिए क्या कॉलबैक विधि में होना चाहिए की जरूरत है - यहाँ सिर्फ अपनी किसी न किसी सुझाव है:

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
    AccessibilityNodeInfo source = event.getSource();   
    if(event.getEventType()==AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) 
     if(isAlert(source)) //explore the view (maybe recursively) to find if there is an alert 
      performGlobalAction(GLOBAL_ACTION_BACK); 
} 

और तरह

private boolean isAlert(AccessibilityNodeInfo view){ 

    int count = view.getChildCount(); 
    boolean result = false; 
    for(int i=0; i<count; i++){ 
     AccessibilityNodeInfo child = view.getChild(i); 
     if(child.getClassName().contains("Alert")){ 
      return true; 
     } 
     if (explore(child)); 
     result = true; 
     child.recycle(); 
    return result; 
} 
+0

आप ऐसा करने के लिए कोड की मदद करने के कुछ बॉयलरप्लेट प्रदान कर सकते हैं/या क्योंकि मैं यह समझ नहीं अभी तक –

+0

ठीक पुनरावर्ती तरीका हो सकता है, मैं बस जल्दी से के साथ कुछ कोड जोड़ने के बाद मेरी आपके मुद्दे के लिए विचार। – Tom

+0

मैं अभी भी आपके विचार को दोहराने में असमर्थ हूं –

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