繁体   English   中英

无法解析方法 checkSelfPermission

[英]Cannot resolve method checkSelfPermission

我正在尝试让我的应用程序为 Android 6 做好准备,但现在我遇到了需要请求和检查权限的问题。

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

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

问题是 Android Studio 说Cannot resolve method 'checkSelfPermission'

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

TargetAPI 为 23。

有谁知道解决方案?

以下是您在各种情况下需要调用的方式,

在活动的情况下:

 ContextCompat.checkSelfPermission(MyActivity.this,
        Manifest.permission.WRITE_CALENDAR);

在片段的情况下:

 ContextCompat.checkSelfPermission(getActivity(),
        Manifest.permission.WRITE_CALENDAR);

在任何实用程序类使用上下文的情况下:

 ContextCompat.checkSelfPermission(context,
        Manifest.permission.WRITE_CALENDAR);

在下方评论以获取更多信息

哦,天哪 - 多么愚蠢的错误。

AS 将 supportlib 作为 jar 导入,这个 jar 来自 2014 年。我只是用真正的依赖项替换了 jarimport 并且知道它正在工作。

谢谢你们的帮助!

对于Fragment使用getActivity().checkSelfPermission

对于Activity使用this..checkSelfPermission或简单的checkSelfPermission

@SuppressLint("NewApi")

我只是在我的页面顶部使用它,它对我有用......

尽管它可能很愚蠢,但它可能出现在错误的地方。 我有同样的问题。 粗体部分是我最初放置代码的地方。 斜体部分是它应该去的地方

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'}*

我有同样的问题。 就我而言,我添加了一个使用旧 appcompat 版本的库,然后编译器找不到正确的 appcompat。

为了解决这个问题,我在导入罪魁祸首库时添加了选项 {transitive = false},这解决了问题。

我现在有:

api ('org.library.using.old.appcompat:1.0.1') {transitive = false}

尝试在带有 Kotlin 的Fragment使用checkSelfPermission()并想知道如何绕过Context为 null?

看看下面的示例,请记住,在Fragment附加到ActivityContext将为空。

private fun fineLocationPermissionApproved(): Boolean {

    val context = context ?: return false

    return PackageManager.PERMISSION_GRANTED == checkSelfPermission(
        context,
        Manifest.permission.ACCESS_FINE_LOCATION
    )
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM