2013-06-04 15 views
13

यदि उपयोगकर्ता ऐप सेटिंग्स में पुश अधिसूचना बंद कर देता है तो प्रोग्रामेटिक रूप से कैसे जांचें? क्या मैं इसे ऐप से सीधे ऐप सेटिंग्स खोल सकता हूं ताकि उपयोगकर्ता इसे चालू कर सकें?एंड्रॉइड - पुश अधिसूचना चालू है?

enter image description here

धन्यवाद

+0

जहाँ तक मुझे पता है, आप उन सूचनाओं को बंद नहीं कर सकते। यदि आप [अधिसूचना] (https://developer.android.com/reference/android/app/Notification.html) और [अधिसूचना प्रबंधक] (https://developer.android.com/reference/android/app/NotificationManager) की जांच करते हैं। एचटीएमएल) आपको कोई भी विधि नहीं दिखाई देगी जो उस जानकारी को प्राप्त करने की अनुमति देती है। मुझसे गलती भी हो सकती है। – Akatosh

+0

शायद http://stackoverflow.com/questions/4421527/start-android-plication-info- स्क्रीन मदद कर सकता है। – OcuS

+0

क्या यह सही है कि आपको ऐप को डी-इंस्टॉल करने की आवश्यकता है यदि आप इसके बारे में कोई नया पुश संदेश कभी नहीं प्राप्त करना चाहते हैं? – vikingsteve

उत्तर

8

आप मान लिया जाये कि Google क्लाउड संदेश सेवा की बात कर रहे (जब से तुम एंड्रॉयड और पुश अधिसूचना टैग का उपयोग कर रहे हैं), वहाँ कोई सामान्य सक्षम/GCM सेवा को अक्षम (करने के लिए इस्तेमाल कर रहे हैं सेटिंग्स आईओएस उपकरणों के लिए ऐप्पल पुश अधिसूचना सेवा के विपरीत)।

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

यह कहा गया है कि ऐप को वास्तव में जीसीएम संदेशों को प्राप्त करने के लिए, आपके ऐप को प्रोग्रामेटिक रूप से जीसीएम सेवा में पंजीकरण करना होगा। आप इसे अपने ऐप के भीतर किसी भी स्थान पर कर सकते हैं, और आप app settings गतिविधि (या खंड या जो कुछ भी) बना सकते हैं जिसमें उपयोगकर्ता जीसीएम को सक्षम/अक्षम कर सकता है (जो जीसीएम से पंजीकरण/पंजीकरण रद्द कर देगा)। आपके ऐप में एक सतत स्टोर हो सकता है जो आपको पंजीकरण पर प्राप्त होने वाली पंजीकरण आईडी को जीसीएम में रखेगा, और आप यह स्टोर यह निर्धारित करने के लिए कर सकते हैं कि आपका ऐप जीसीएम में पंजीकृत है या नहीं।

आप अपने उपयोगकर्ता से यह चालू करने के लिए कह सकते हैं कि ऐप पहले से चल रहा है (यदि आपके पास कुछ कोड है जो ऐसा करता है)। यदि यह नहीं चल रहा है और ऐप उस डिवाइस पर जीसीएम के लिए पंजीकृत नहीं है, तो आपका सर्वर जीसीएम संदेश भेज नहीं सकता है।

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

+2

तो अगर मैं इसे सही समझता हूं, तो ऐप सेटिंग्स में "अधिसूचना दिखाएं" ऐप से सभी "पॉपअप" को छिपाने के लिए है? उदाहरण के लिए, मैं अभी भी अधिसूचना प्राप्त कर सकता हूं, उन्हें स्टोर कर सकता हूं और जब उपयोगकर्ता ऐप दर्ज करता है तो एक संवाद के रूप में दिखाया जा सकता है। – goodm

+0

@goodm मुझे यकीन नहीं है कि आप कौन सी ऐप सेटिंग्स का जिक्र कर रहे हैं। क्या आप एक विशिष्ट ऐप के भीतर विशिष्ट 'ऐप सेटिंग्स' का जिक्र कर रहे हैं? यदि आप जीसीएम सेवा से आने वाली अधिसूचनाओं का जिक्र कर रहे हैं, तो यह तय है कि आप अपना ऐप कैसे लिखें (चाहे स्वचालित रूप से जीसीएम में पंजीकरण करें और हमेशा पंजीकृत रहें, जो आपको हमेशा सूचनाएं प्राप्त करने की अनुमति देगा)। – Eran

+0

ऐप सेटिंग्स से मेरा मतलब है सेटिंग्स -> ऐप मैनेजर -> ऐप जानकारी, "सूचनाएं दिखाएं" नामक छोटा "टिक" विकल्प है – goodm

2

आप इस प्रॉपर्टी तक नहीं पहुंच सकते हैं जब तक आप सिस्टम प्रक्रिया घोषित नहीं करते हैं या रूट अनुमति नहीं देते हैं, सबसे पहले आप फ़ाइल की अनुमति देख सकते हैं: /data/system/notifycaiton_policy.xml: -wr ------।

अन्य तरीकों से, स्रोत कोड देखें: /android/4.2/frameworks/base/services/java/com/android/server/NotificationManagerService.java। एपीआई में: public void setNotificationsEnabledForPackage(String pkg, boolean enabled), वहाँ फोन करने वाले का यूआईडी की जाँच करेगा Process.SYSTEM_UID हो या नहीं:

void checkCallerIsSystem() { 
    int uid = Binder.getCallingUid(); 
    if (UserHandle.getAppId(uid) == Process.SYSTEM_UID || uid == 0) { 
     return; 
    } 
    throw new SecurityException("Disallowed call for uid " + uid); 
} 
संबंधित मुद्दे