跟随我的BroadcastReceiver:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// my code
}
}
它已在AndroidManifest中注册:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:enabled="true"
android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED" />
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
lint在MyBroadcastReceiver的onReceive方法中报告以下错误:
此广播接收器声明了受保护对象的意图过滤器 广播操作字符串,只能由系统发送,不能发送 第三方应用程序。但是,接收者的onReceive方法 似乎没有调用getAction来确保接收到的Intent 操作字符串与期望值匹配,有可能使之匹配 另一个演员可能不采取任何行动就发送了欺骗意图 字符串或其他操作字符串,并导致不良行为。 广播接收器,它声明了一个意图过滤器 保护广播操作字符串必须检查接收到的 意向的操作字符串与期望值匹配,否则为 恶意行为者有可能欺骗意图。
问题ID:UnsafeProtectedBroadcastReceiver
如何修复UnsafeProtectedBroadcastReceiver?
答案 0 :(得分:8)
按照操作说明过滤操作:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case Intent.ACTION_DATE_CHANGED:
//what you want to do
break;
case Intent.ACTION_BOOT_COMPLETED:
//what you want to do
break;
}
}
}
如果不进行检查,则任何应用程序都可以通过指定类名在接收器上“调用” BOOT_COMPLETED,因为这会绕过过滤器。