【问题标题】:Cannot resolve method checkSelfPermission无法解析方法 checkSelfPermission
【发布时间】:2015-12-12 09:17:58
【问题描述】:

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

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

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

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

我已经包含了 appcompat 和支持库。 ContextCompat 是 AS 已知的,但方法本身是未知的。我不知道我在做什么错 - 在另一个项目中我可以编写这个方法并且它被识别出来。

TargetAPI 是 23。

有人知道解决办法吗?

【问题讨论】:

  • 那个方法是写在activity里面的吗?还是片段?还是实用程序类?
  • 它在一个Activity的onCreate里面

标签: java android android-studio permissions


【解决方案1】:

这是您在各种场景中需要调用的方式,

活动情况:

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

如果是片段:

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

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

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

更多信息请在下方评论

【讨论】:

  • 如果它在 onCreate() 你可以使用这个:ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR);
  • AS 告诉我它不知道函数 checkSelfPermission 这就是问题所在。如果有帮助:该项目是从 Eclipse 导入的。我上面提到的另一个我可以做权限检查的地方是一个最初的 AS 项目
  • 好的,你可以发布你的 build.gradle。
  • 在下面查看我的答案 - 已修复:o 感谢您的帮助 :)
  • @ShinoyShaji 我认为您可能想在单击适配器行时执行一些操作,如果是这种情况,我建议您从适配器回调到活动,否则您可以在适配器中传递活动构造函数并执行权限检查。
【解决方案2】:

天哪 - 多么愚蠢的错误。

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

感谢你们的帮助!

【讨论】:

  • 对于与您的情况完全相同的人(其他人的答案不适用于我的情况),但还没有真正理解您是如何解决的,请您详细说明一下吗?你到底用什么代替了什么?提前谢谢!
  • 同样的问题,从 eclipse 导入,它拖着旧的支持 jar 。因此,请检查您的应用程序库文件夹,因为 AS 将从那里导入,确保那里没有旧 jars(我刚刚删除了它们),并在您的应用程序构建 gradle 中添加依赖项,例如实现 'com.android.support:support-compat:28.+'
【解决方案3】:

对于Fragment,请使用getActivity().checkSelfPermission

对于Activity,请使用this..checkSelfPermission 或直接使用checkSelfPermission

【讨论】:

    【解决方案4】:
    @SuppressLint("NewApi")
    

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 嗯,编辑没有按照它说的那样做。 “粗体”部分实际上是用“**”括起来的,“斜体”部分是用“*”括起来的
      【解决方案6】:

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

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

      现在我有:

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

      【讨论】:

        【解决方案7】:

        尝试在 Fragment 中与 Kotlin 一起使用 checkSelfPermission() 并想知道如何避免 Context 为空?

        看看下面的示例,记住,在Fragment 附加到Activity 之前,Context 将为空。

        private fun fineLocationPermissionApproved(): Boolean {
        
            val context = context ?: return false
        
            return PackageManager.PERMISSION_GRANTED == checkSelfPermission(
                context,
                Manifest.permission.ACCESS_FINE_LOCATION
            )
        }
        

        【讨论】:

          猜你喜欢
          • 2016-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-15
          • 2015-06-10
          • 2019-08-28
          • 2019-10-10
          相关资源
          最近更新 更多