无法解析方法 checkSelfPermission

问题描述 投票:0回答:8

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

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

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

问题是 Android Studio 说

Cannot resolve method 'checkSelfPermission'

我已经包含了 appcompat 和支持库。 AS 已知

ContextCompat
,但方法本身未知。我不知道我做错了什么 - 在另一个项目中我可以编写这个方法并且它得到认可。

目标API是23。

有谁知道解决办法吗?

java android android-studio permissions
8个回答
26
投票

以下是您在各种场景下需要如何调用,

如果有活动:

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

如果有碎片:

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

如果有任何实用程序类使用上下文:

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

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


16
投票

天哪 - 多么愚蠢的错误。

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

谢谢大家的帮助!


5
投票

对于

Fragment
使用
getActivity().checkSelfPermission

对于

Activity
使用
this..checkSelfPermission
或简单地使用
checkSelfPermission


1
投票
@SuppressLint("NewApi")

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


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

0
投票

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

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

现在我有:

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


0
投票

尝试在 Kotlin 的

checkSelfPermission()
中使用
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
    )
}

0
投票

0

对于 Android 12 及更高版本...这听起来有点有趣...尝试 chatGPT 以获得您正在寻找的答案。

这是我使用的提示

向我展示如何使用 java 和 minSdkVersion 29 将蓝牙权限添加到 Android studio 中的 mainactivity

我们所有程序员的新时代!!

© www.soinside.com 2019 - 2024. All rights reserved.