Android M中ContentResolver.getCurrentSyncs()返回账号名被屏蔽问题咨询
关于Android M中SyncInfo账号名日志脱敏与equals比对的问题
嘿,这个场景我之前做同步相关开发时正好碰到过,给你梳理一下:
1. 账号名仅日志被审查,字符串本身完全可读
你看到日志里的*****只是Android系统的隐私保护机制——系统会自动对Logcat输出中的敏感信息(比如账号、手机号、邮箱这类标识性内容)进行脱敏替换,但SyncInfo对象里的account.name字符串本身是完整的、未被篡改的。
你可以通过Debug模式断点调试,查看SyncInfo实例的account.name字段,会发现它确实是实际的账号内容,只是打Log的时候被系统替换成了星号。而AccountManager.getAccounts()拿到的账号名在日志里可读,大概率是因为输出的时机或日志级别等因素,系统没触发脱敏,但本质上两者拿到的账号字符串是一致的。
2. 如何用equals()准确比对
因为SyncInfo里的账号字符串本身是完整的,所以直接用标准的equals()方法比对就可以,不需要额外处理。举个简单的示例代码:
// 从AccountManager获取目标账号(建议按账号类型过滤,避免无关账号干扰) AccountManager accountManager = AccountManager.get(getApplicationContext()); Account[] targetAccounts = accountManager.getAccountsByType("com.your.app.account.type"); // 替换为你的账号类型 if (targetAccounts.length > 0) { String targetAccountName = targetAccounts[0].name; // 获取当前同步信息并执行比对 List<SyncInfo> syncInfos = ContentResolver.getCurrentSyncs(); for (SyncInfo syncInfo : syncInfos) { // 直接用equals比对两个字符串即可 if (syncInfo.account.name.equals(targetAccountName)) { // 匹配到目标同步账号,执行后续逻辑 Log.d("SyncMatch", "找到对应同步账号"); break; } } }
如果你的应用支持多账号,记得用getAccountsByType()精准过滤出你需要的账号类型,避免出现比对错误的情况。
内容的提问来源于stack exchange,提问作者lenhuy2106
相关产品推荐
相关产品推荐

