簡體   English   中英

輔助功能服務是否有任何方法可以檢測用戶何時位於啟動器或應用程序抽屜中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM