Android 违规获取用户隐私(获取软件安装列表信息)整改

前几天,收到公司App违规收取用户隐私的邮件,其中一项说我们App存在在用户同意协议前获取软件安装列表信息。
经排查,发现判断主进程的时候,会去获取软件安装列表。

public static boolean isMainProcess() {
    return Utils.getApp().getPackageName().equals(getCurrentProcessName());
}

private static String getCurrentProcessName() {
    try {
        ActivityManager am = (ActivityManager) Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE);
        if (am == null) return "";
        List<ActivityManager.RunningAppProcessInfo> info = am.getRunningAppProcesses();
        if (info == null || info.size() == 0) return "";
        int pid = android.os.Process.myPid();
        for (ActivityManager.RunningAppProcessInfo aInfo : info) {
            if (aInfo.pid == pid) {
                if (aInfo.processName != null) {
                    return aInfo.processName;
                }
            }
        }
    } catch (Exception e) {
        return "";
    }
    return "";
}

所以,我们需要替换一种获取当前进程的方式。
需要注意的是,这种方式有可能获取失败,需要在catch中返回默认的进程名

public static boolean isMainProcess() {
    return BuildConfig.APPLICATION_ID.equals(getCurrentProcessNameByFile());
}

private static String getCurrentProcessNameByFile() {
    try {
        File file = new File("/proc/" + android.os.Process.myPid() + "/cmdline");
        BufferedReader mBufferedReader = new BufferedReader(new FileReader(file));
        String processName = mBufferedReader.readLine().trim();
        mBufferedReader.close();
        return processName;
    } catch (Exception e) {
        e.printStackTrace();
        return "这里写你的App的进程名"; //TODO 有可能获取失败,需要写默认的进程名
    }
}

这样子,我们就不会去获取软件安装列表信息了。

另一个违规问题详见 Android 违规获取用户隐私(获取MAC地址)整改

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值