无法解析方法checkSelfPermission

时间:2015-12-12 09:17:59

标签: java android android-studio permissions

我正在尝试让我的应用为Android 6做好准备,现在我已经到了需要请求并检查权限的位置。

我在文档中尝试了以下内容:

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR);

问题在于Android Studio说Cannot resolve method 'checkSelfPermission'

我已经包含了appcompat和支持lib。 AS已知ContextCompat但该方法本身未知。我不知道我做错了什么 - 在另一个项目中,我可以编写这个方法并得到认可。

TargetAPI是23。

有人知道解决方案吗?

7 个答案:

答案 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..checkSelfPermissioncheckSelfPermission

答案 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
    )
}