是否可以在小于 23 的 SDK 上设置 checkSelfPermission?

Is it available to set checkSelfPermission on minimum SDK < 23?

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

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

此致

Use ContextCompat.checkSelfPermission(), ActivityCompat.requestPermissions(), and ActivityCompat.shouldShowPermissionRequestRationale(),来自 support-v4 库(v23 或更高版本)。这些是向后兼容的;如果您 运行 使用旧版本的 Android,他们将 "do the right thing"(例如 return PackageManager.PERMISSION_GRANTED 代表 ContextCompat.checkSelfPermission())。

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

在获得检查权限之前检查您的 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
           }

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

您必须调用这些方法:)

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;
    }