# 安卓TV客户不希望自己应用的 SYSTEM_ALERT_WINDOW 权限,被用户通过原生设置取消 #
思路:
SYSTEM_ALERT_WINDOW属于安卓特殊权限,找到原生设置中用来设置“勾选特殊权限的应用列表”的代码,过滤掉客户指定的应用。
代码路径:
packages\apps\TvSettings\Settings\src\com\android\tv\settings\device\apps\specialaccess\ManageApplicationsController.java
修改的位置:
在TvSettings中,通过ManageApplicationsController.java类中的updateAppList()方法刷新勾选权限的应用列表。在该方法中过滤掉指定应用的包名后,列表中就不会出现该应用了。
修改前的代码:
private void updateAppList(ArrayList<ApplicationsState.AppEntry> apps) { PreferenceGroup group = mCallback.getAppPreferenceGroup(); final List<Preference> newList = new ArrayList<>(apps.size() + 1); for (final ApplicationsState.AppEntry entry : apps) { final String packageName = entry.info.packageName; mApplicationsState.ensureIcon(entry); Preference recycle = group.findPreference(packageName); if (recycle == null) { recycle = mCallback.createAppPreference(); } newList.add(mCallback.bindPreference(recycle, entry)); } final Preference header = group.findPreference(HEADER_KEY); // Because we're sorting the app entries, we should remove-all to ensure that sort order // is retained group.removeAll(); if (header != null) { group.addPreference(header); } if (newList.size() > 0) { for (Preference prefToAdd : newList) { group.addPreference(prefToAdd); } } else { group.addPreference(mCallback.getEmptyPreference()); } }