Android辅助功能服务

时间:2012-03-12 22:18:31

标签: android notifications accessibility android-a11y

我正在尝试编写一个非常基本的Android辅助功能服务,它会在发出任何通知时显示消息并振动。我试过通过手机发送电子邮件来测试它(我想这会显示一些通知)。但我没有看到任何通知。

我的服务代码类似于

public class NotifierService extends AccessibilityService {

  @Override
  public void onAccessibilityEvent(AccessibilityEvent evt) {
    Toast.makeText(this, "Got event from " + evt.getPackageName(), Toast.LENGTH_SHORT)
            .show();
    Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE);
    v.vibrate(new long[] { 0, 250, 250, 250, 250, 250, 250, 250, 250 }, -1);
  }

  @Override
  public void onInterrupt() { }
}

我已验证该服务正在运行,我已在手机的辅助功能菜单中启用了该功能。清单看起来像这样(删除了一些不相关的部分):

<uses-permission android:name="android.permission.VIBRATE" />
<application>
    <activity
        android:name=".MyActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name=".NotifierService" android:enabled="true" >
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    </service>
</application>

MyActivity只是一个带有启动/停止服务按钮的活动。

3 个答案:

答案 0 :(得分:4)

我在服务标签

中添加了元数据元素
<meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" />

在xml资源文件中我有

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
                       android:accessibilityEventTypes="typeNotificationStateChanged"
                       android:accessibilityFeedbackType="feedbackAllMask"
                       android:notificationTimeout="100" />

答案 1 :(得分:1)

辅助功能服务对您来说太过分了,您应该使用NotificationListenerService。 NotificationListenerService更易于实现,对用户更安全(隐私原因)。

答案 2 :(得分:0)

配置辅助功能服务的另一种方法是从java代码覆盖OnServiceConnected()的{​​{1}}方法。

AccessibilityService
  

参考