我正在尝试让我的应用为Android 6做好准备,现在我已经到了需要请求并检查权限的位置。
我在文档中尝试了以下内容:
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.WRITE_CALENDAR);
问题在于Android Studio说Cannot resolve method 'checkSelfPermission'
。
我已经包含了appcompat和支持lib。 AS已知ContextCompat
但该方法本身未知。我不知道我做错了什么 - 在另一个项目中,我可以编写这个方法并得到认可。
TargetAPI是23。
有人知道解决方案吗?
答案 0 :(得分:18)
以下是您需要在各种场景中调用的方式,
如果有活动:
ContextCompat.checkSelfPermission(MyActivity.this,
Manifest.permission.WRITE_CALENDAR);
如果是片段:
ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_CALENDAR);
如果任何实用程序类使用上下文:
ContextCompat.checkSelfPermission(context,
Manifest.permission.WRITE_CALENDAR);
以下评论以获取更多信息
答案 1 :(得分:15)
哦,我的天意 - 这是一个多么愚蠢的错误。
AS将supportlib作为jar导入,这个jar来自2014年。我只是将jarimport替换为真正的依赖,并且知道它正在工作。
感谢您的帮助!
答案 2 :(得分:3)
Fragment
使用getActivity().checkSelfPermission
Activity
使用this..checkSelfPermission
或checkSelfPermission
答案 3 :(得分:1)
@SuppressLint("NewApi")
我只是在我的页面上使用它,它对我有用......
答案 4 :(得分:0)
尽管可能很傻,但它可能在错误的地方。我有同样的问题。粗体部分是我最初放置代码的地方。斜体部分应该已经消失了
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.i("-----------", location.toString());
}
**if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {'some code'}**
}; 'End of LocationListener method
*if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) { 'some code'}*
答案 5 :(得分:0)
我遇到了同样的问题。 在我的情况下,我添加了一个使用旧的appcompat版本的库,然后编译器找不到合适的appcompat。
为了解决这个问题,我在导入罪魁祸首库时添加了{transitive = false}选项,这解决了这个问题。
现在我有:
api ('org.library.using.old.appcompat:1.0.1') {transitive = false}
答案 6 :(得分:0)
试图在checkSelfPermission()
中与Kotlin一起使用Fragment
,并想知道如何避免Context
为空?
看看下面的示例,并记住,在将Fragment
附加到Activity
之前,Context
将为空。
private fun fineLocationPermissionApproved(): Boolean {
val context = context ?: return false
return PackageManager.PERMISSION_GRANTED == checkSelfPermission(
context,
Manifest.permission.ACCESS_FINE_LOCATION
)
}