【问题标题】:Is it available to set checkSelfPermission on minimum SDK < 23?是否可以在最小 SDK < 23 上设置 checkSelfPermission?
【发布时间】:2015-12-13 10:02:54
【问题描述】:

Android-M 中的新运行时权限要求至少 23 个 API 级别,但我的项目中仍然需要至少 16 个 API 级别。

那么,如何让这段代码更加向前兼容呢?

问候

【问题讨论】:

    标签: android android-6.0-marshmallow


    【解决方案1】:

    Use ContextCompat.checkSelfPermission()ActivityCompat.requestPermissions()ActivityCompat.shouldShowPermissionRequestRationale(),来自 support-v4 库(v23 或更高版本)。这些是向后兼容的;如果您在旧版本的 Android 上运行,它们将“做正确的事”(例如,为 ContextCompat.checkSelfPermission() 返回 PackageManager.PERMISSION_GRANTED)。

    【讨论】:

    • 我也使用支持 v4 和 ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED 在 HTC Incredible 上使用 android 2.3.3 返回 false。知道为什么吗?
    • @Anonymous:您的targetSdkVersion 需要为 23 或更高。
    • 它是.. minSdkVersion="7" android:targetSdkVersion="23"
    • @Anonymous,您可能还需要将 minSdkVersion 更改为 23。
    • 根据我的经验,在旧版本上(我正在使用 API v.7 进行测试)ActivityCompat.checkSelfPermission 不会返回授予的权限。
    【解决方案2】:

    您可以查看构建版本if(Build.Version.SDK_INT &gt;= Build.VERSION_CODES.MARSHMALLOW)。然后在那里处理棉花糖权限,否则处理其他版本。

    【讨论】:

      【解决方案3】:

      在获得检查权限之前检查您的 android 版本:

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                      if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                          // TODO: Consider calling
                          //    public void requestPermissions(@NonNull String[] permissions, int requestCode)
                          // here to request the missing permissions, and then overriding
                          //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                          //                                          int[] grantResults)
                          // to handle the case where the user grants the permission. See the documentation
                          // for Activity#requestPermissions for more details.
                          return;
                      }
                  }else{
                    //Do Your Stuff
                 }
      

      【讨论】:

        【解决方案4】:

        如果您不想使用 AppCompatActivity,此处描述的方式 https://codemammoth.blogspot.gr/2016/06/how-to-invoke-checkselfpermission.html

        你必须调用方法:)

        【讨论】:

        • 我需要的答案!~ Tnanks,兄弟
        【解决方案5】:

        checkSelfPermission 在 sdk 23 以上可用。

        我们可以使用包管理器检查权限是否可用

        public static Boolean checkpermissions(Activity activity) {
        
        
                PackageManager mPackageManager = activity.getPackageManager();
                int hasPermStorage = mPackageManager.checkPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, activity.getPackageName());
        
        
                if (hasPermStorage != PackageManager.PERMISSION_GRANTED) {
                    // do stuff
                    //Toast.makeText(getApplicationContext(), "No permission", Toast.LENGTH_LONG).show();
        
                    return false;
                } else if (hasPermStorage == PackageManager.PERMISSION_GRANTED) {
        
                    // do stuff
                    //Toast.makeText(getApplicationContext(), "Has permission", Toast.LENGTH_LONG).show();
        
                    return true;
                }else
                    return false;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-07
          • 2022-11-22
          • 2011-03-18
          • 2011-01-26
          • 2020-06-18
          相关资源
          最近更新 更多