Java getPackageName()返回null
我正在注册AccessibilityService以侦听应用程序更改。它适用于我测试过的所有手机,但在Android 5.0的Galaxy A3上失败,因为AccessibilityEvent.getPackageName()返回null。应该设置packageName,因为它是一个常规应用程序,从GooglePlay下载,并与用户交互 有人知道这是为什么以及如何修复吗 下面是我代码的相关部分Java getPackageName()返回null,java,android,accessibilityservice,Java,Android,Accessibilityservice,我正在注册AccessibilityService以侦听应用程序更改。它适用于我测试过的所有手机,但在Android 5.0的Galaxy A3上失败,因为AccessibilityEvent.getPackageName()返回null。应该设置packageName,因为它是一个常规应用程序,从GooglePlay下载,并与用户交互 有人知道这是为什么以及如何修复吗 下面是我代码的相关部分 <service android:name=".presentation.view.se
<service
android:name=".presentation.view.services.LockService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config"/>
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
</service>
由于文档没有具体解释这一点,我将尝试提供一些我在使用
AccessibilityService
之后想到的东西。我写这篇文章是为了以防万一,因为event.getPackageName()
总是返回null
,但不要认为我的话是理所当然的
从易访问性服务的文档中,我看到您可以设置属性android:packageNames=“@strings/blah_-blah”
,其中blah_-blah
是我们的服务将观察到的以逗号分隔的包名列表
在指定此属性的情况下,我们将只收到那些特定包的通知,event.getPackageName()
将返回正确的包名
如果我们不设置此属性,或者专门将其设置为null
,我们将收到发生的所有事件的通知,但我们将无法识别“生成”可访问性事件的特定包
由于可以动态设置此AccessibilityServiceInfo
属性,因此理论上,您可以获取当前安装的软件包列表,并将其设置为服务将监视的packageNames
@Override
protected void onServiceConnected() {
super.onServiceConnected();
AccessibilityServiceInfo info = getServiceInfo();
// your other assignments
info.packageNames = new String[]{...};
setServiceInfo(info);
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
AccessibilityServiceInfo info = getServiceInfo();
// your other assignments
info.packageNames = new String[]{...};
setServiceInfo(info);
}