You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:15:47