接收到通信管理局通知,应用存在后台静默监听安装、卸载等广播。
查看通信管理局的检测报告,应该是应用注册这三个广播
android.intent.action.PACKAGE_ADDED
android.intent.action.PACKAGE_REPLACED
android.intent.action.PACKAGE_REMOVED
全局查询后也没发现自己的应用是在什么时候注册的,那问题肯定就归于第三方sdk了。
比如某某sdk在初始化时注册了这三个广播后,通信管理局的测试人员将app切换至后台,再对设备上的应用进行随机删除,我们的应用将会收到系统的广播通知,那么恭喜各位的应用就违规了。
排查思路复写一下自己application的attachbasecontext方法,然后通过看日志来归因:
/**
* @author maipian
* @description 描述
* @date 8/15/24
*/
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(new MyContextWrapper(base));
}
}
/**
* @author maipian
* @description 描述
* @date 8/15/24
*/
public class MyContextWrapper extends ContextWrapper {
private static final String TAG = "MyContextWrapper";
public MyContextWrapper(Context base) {
super(base);
}
@Override
public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
Log.d(TAG, "-------注册平台包名:" + receiver + "开始-------");
printAction(filter, 0);
Log.d(TAG, "-------注册平台包名: " + receiver + "结束-------");
return super.registerReceiver(receiver, filter);
}
@Override
public void unregisterReceiver(BroadcastReceiver receiver) {
Log.d(TAG, "Unregistering receiver: " + receiver);
super.unregisterReceiver(receiver);
}
private void printAction(IntentFilter filter, int i) {
try {
String s = filter.getAction(i);
Log.d(TAG, "-------注册的广播行为: " + s);
i++;
printAction(filter, i);
} catch (Exception e) {
}
}
}
这时候我们将看到是哪家的sdk在初始化时就注册了相关广播,然后去提交工单询问怎么关闭即可