1. 目的
不进行拦截账户服务
2. 识别账户服务
主要在bing-service中判断action是否匹配ACTION_AUTHENTICATOR_INTENT
import static android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT;
if ("android".equals(callerApp)
&& intent != null && ACTION_AUTHENTICATOR_INTENT.equals(intent.getAction())
// 当前是否有用户操作行为
&& isUserTouchActive()) {
if (DEBUG) Slog.d(TAG, "bind Account service :" + targetApp + " from " + callerApp);
return true;
}
3. 应用层接口
public static HashMap<String, String> getAccountAuthenticators(Context context) {
PackageManager pm = context.getPackageManager();
HashMap<String, String> accountList = new HashMap<String, String>();
Intent intent = new Intent("android.accounts.AccountAuthenticator");
List<ResolveInfo> resolveInfoList = pm.queryIntentServices(intent, PackageManager.GET_DISABLED_COMPONENTS);
for (ResolveInfo resolveInfo : resolveInfoList) {
ServiceInfo packinfo = resolveInfo.serviceInfo;
if ((packinfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
accountList.put(packinfo.packageName, packinfo.name);
Log.d(TAG, "getAccountAuthenticators packageName = " + packinfo.packageName + ", name " + packinfo.name);
}
}
return accountList;
}