2012-09-23 22 views
13

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

Android मेनिफेस्ट:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.test.slide" 
android:versionCode="1" 
android:versionName="1.0"> 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15"/> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
<uses-permission android:name="android.permission.GET_TASKS"/> 
<application android:label="Slide" 
    android:icon="@drawable/ic_launcher" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".Settings" 
     android:label="Slide"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".Tools" 
     android:label="Slide" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar"> 
    </activity> 
    <service android:name=".LocalService"/> 
    <service android:name=".NotificationService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" 
     android:label="Slide" 
     android:enabled="true" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService"/> 
     </intent-filter> 
    </service> 
</application> 

NotificationService.java

package com.test.slide; 

import android.accessibilityservice.AccessibilityService; 
import android.accessibilityservice.AccessibilityServiceInfo; 
import android.view.accessibility.AccessibilityEvent; 

public class NotificationService extends AccessibilityService { 
@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
    System.out.println("onAccessibilityEvent"); 
    if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { 
     System.out.println("notification: " + event.getText()); 
    } 
} 
@Override 
protected void onServiceConnected() { 
    System.out.println("onServiceConnected"); 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
    info.notificationTimeout = 100; 
    info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK; 
    setServiceInfo(info); 
} 

@Override 
public void onInterrupt() { 
    System.out.println("onInterrupt"); 
} 
} 

किसी भी मदद के लिए धन्यवाद।

+0

क्या आप समाधान नहीं मिला काम कर सकते हैं? मुझे भी ठीक यही समस्या है। –

+0

alanv का उत्तर मेरे लिए काम किया – ng93

+0

आप किस सिस्टम संस्करण प्रोग्रामिंग कर रहे हैं? आईसीएस? जेली बीन? –

उत्तर

21

एंड्रॉइड 4.0 और बाद में एक्सेसिबिलिटी सेवाएं अजीब तरीके से व्यवहार कर सकती हैं अगर मेनिफेस्ट में परिभाषित accessibility-service मेटा-डेटा टैग नहीं है। नीचे दिए गए उदाहरणों में मेटा-डेटा को परिभाषित करने का प्रयास करें। प्री-4.0 उपकरणों के साथ पिछड़े संगतता को बनाए रखने के लिए आपको setServiceInfo() का उपयोग करना जारी रखना चाहिए।

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

AndroidManifest.xml

<service 
     . . . 
     android:name=".NotificationService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" > 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.accessibilityservice" 
      android:resource="@xml/accessibilityservice" /> 
    </service> 

रेस/xml/accessibilityservice.xml

<?xml version="1.0" encoding="utf-8"?> 
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accessibilityEventTypes="typeNotificationStateChanged" 
    android:accessibilityFeedbackType="feedbackAllMask" 
    android:notificationTimeout="100" /> 

अपने feedbackType में एक त्रुटि हुई थी। नीचे सुधार किया गया। फिर भी, एक और विशिष्ट फीडबैक प्रकार का उपयोग करने पर विचार करें।

NotificationService.java

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

अब आप एक्सएमएल और कोड में 'serviceInfo' को परिभाषित कर रहे हैं। आप AccessibilityServiceInfo का कोड भाग छोड़ सकते हैं क्योंकि एक्सएमएल को मैनिफेस्ट में परिभाषित किया गया है। –

+3

इसके विपरीत, आपको इसे पूर्व-आईसीएस उपकरणों के साथ संगतता के लिए दोनों स्थानों में परिभाषित करना होगा। – alanv

+0

धन्यवाद! धन्यवाद! धन्यवाद! – Antonio

4

एप्लिकेशन का उपयोग करने AccessibilityService प्रणाली घटनाओं तक पहुँचने के लिए सेटिंग> पहुंच से एक की अनुमति है की जरूरत है। सेटिंग्स से अनुमति की अनुमति दें। यह

जांच के लिए इस लिंक

accessibility service is not started

+0

धन्यवाद मैंने हर चीज की कोशिश की लेकिन मुझे इसे सेटिंग्स से सक्षम करना है –

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