8

मैं अन्य अनुप्रयोगों द्वारा अधिसूचना बार पर निकाली गई अधिसूचनाओं को पढ़/एक्सेस/लॉग करना चाहता हूं।अधिसूचना अधिसूचित होने पर अधिसूचित कैसे किया जाए

मैंने Intents और PendingIntents को बहुत कुछ खोजा, लेकिन समाधान नहीं मिला।

क्या किसी भी अधिसूचना को निकाल दिए जाने पर मेरे आवेदन को अधिसूचित करने की आवश्यकता है?

या एंड्रॉइड सिस्टम उपयोगकर्ता स्तर के अनुप्रयोगों द्वारा अधिसूचनाओं को पढ़ने के लिए कुछ प्रदान करता है?

उत्तर

5

अंत में जवाब मिला। !!! AccessibilityService

public class NotificationService extends AccessibilityService { 

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
    // TODO Auto-generated method stub. 
//Code when the event is caught 
    } 
@Override 
public void onInterrupt() { 
    // TODO Auto-generated method stub. 

} 

@Override 
protected void onServiceConnected() { 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
     info.feedbackType = 1; 
      info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
     info.notificationTimeout = 100; 
     setServiceInfo(info); 
    } 
} 

और मेरे प्रकट का उपयोग करना है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="org.test.notify" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk android:minSdkVersion="8" /> 
<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <service android:name=".NotificationService" android:enabled="true"> 
      <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.accessibilityservice.AccessibilityService"/> 
     </intent-filter> 
    </service> 
    </application> 
</manifest> 

कोडिंग का आनंद लें !!!। :)

+1

कोड केवल सूचनाओं से संबंधित घटनाओं को पकड़ने के लिए है। 'info.eventTypes =' को बदलने पर हम विभिन्न प्रकार की घटनाओं को पकड़ सकते हैं। – Kishore

+0

मैं सेवा से जुड़ी विधि पर लॉग इन करने का प्रयास कर रहा हूं, लेकिन यह विफल रहता है, क्या इसे किसी भी अनुमति की आवश्यकता है – Calvin

+0

@ कैल्विन: आपको सेटिंग्स (सेटिंग्स -> पहुंच) से मैन्युअल रूप से एक्सेसिबिलिटी सेवा चालू करने की आवश्यकता है। – Kushal

0

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

0

Intent भेजकर उठाया गया है।

Intent intent = new Intent(this, NotificationReceiver.class); 

NotificationReceiverIntent कैच और एक Notification दिखाई नहीं देता।

BroadCastReceiver का उपयोग करके अपने अनुप्रयोगों में से एक में Intent को पकड़ना पूरी तरह से संभव है और Intent पर फ़िल्टर करें।

+0

"अधिसूचना बार राज्य परिवर्तन" या "अधिसूचना निकाल दी गई" के लिए कोई मंशा नहीं है। – Kishore

+0

यह सच है, लेकिन अधिसूचनाओं का उपयोग करके अधिसूचनाओं को निकाल दिया जाता है .. और इरादों को ब्रॉडकास्ट रिसीवर के साथ पकड़ा जा सकता है। अफसोस, यह सब इस बात पर निर्भर करता है कि आप किस प्रकार का नोफ़िकेशन एक्सेस करना चाहते हैं। – DroidBender

+0

वास्तव में मैं सभी अधिसूचनाओं को लॉग करना चाहता हूं। तो मैं सभी अधिसूचनाओं को पकड़ने के लिए एक सामान्य विधि खोज रहा हूं। – Kishore

7

एपीआई 18 (एंड्रॉयड 4.3) के साथ शुरू यह संभव है: http://developer.android.com/reference/android/service/notification/NotificationListenerService.html

उपयोग करने के लिए बहुत आसान है, लेकिन उपयोगकर्ता मैन्युअल रूप से ऐप्स को अनुमति देने के लिए किया है।

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

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