![](/img/trans.png)
[英]Fill in EditText of any app from (Accessibility)Service?
[英]Is there any way for an Accessibility service to detect when the user is in the launcher or app drawer?
如果您有可檢測到此類事件的無障礙服務:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) { //Called whenever the accessibility service gets an accessibility event
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
if (event.getPackageName() != null && event.getClassName() != null) {
//Component can be an activity, service, BroadcastReceiver, ContentProvider
ComponentName componentName = new ComponentName( //Component can be an activity, service, BroadcastReceiver, ContentProvider
event.getPackageName().toString(),
event.getClassName().toString()
);
ActivityInfo activityInfo = getPackageManager().getActivityInfo(componentName, 0);
boolean isActivity = activityInfo != null;
if (isActivity) {
Log.i(TAG, "packageName for this activity is " + event.getPackageName().toString());
}
}
}
}
我實際上並不知道啟動器的 package 名稱在許多設備上是什么。 它是否有 package 名稱或其他可以在無障礙服務中檢測到的名稱?
您應該能夠通過查找“主頁”活動來找到哪些包是啟動器:
PackageManger pm = getPackageManager();
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> launchers = pm.queryIntentActivities(homeIntent, PackageManager.MATCH_ALL);
String packages[] = new String[launchers.size()];
for (int i = 0; i < launchers.size(); i++) {
packages[i] = laycnhers.get(i).activityInfo.packageName;
}
在無障礙服務初始化時執行此操作,然后檢查無障礙事件的 package 是否在數組中。
通常,應該只有一個這樣的 package,但如果用戶安裝了 3rd 方啟動器或 OEM 包含的可選啟動器,則可能會有更多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.