Android中BroadcastReceiver调用checkSelfPermission参数不匹配如何解决
问题产生原因
ActivityCompat.checkSelfPermission()方法的第一个入参要求为Context类型,你当前在WiFiDerectBroadcastReceiver类中调用该方法时传入的this指向的是BroadcastReceiver实例,而BroadcastReceiver本身不属于Context的子类,参数类型不匹配因此触发编译报错。
解决方法
你可以任选以下任意一种方案修改代码:
- 方案1:使用
onReceive回调自带的context参数作为入参,将报错行代码修改为:
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
- 方案2:使用你构造方法传入的
MainActivity实例mActivity作为入参,将报错行代码修改为:
if (ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
如果后续需要申请未授予的权限,必须使用Activity实例调用权限申请方法:
// 示例:在权限检测未通过时调用,请求码可自定义为整型数值,比如1001 ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1001);
权限申请结果会回调到MainActivity的onRequestPermissionsResult方法中,你在该方法中处理后续逻辑即可。
内容的提问来源于stack exchange,提问作者Tkula
相关产品推荐
相关产品推荐

