繁体   English   中英

android.Manifest.permission.WRITE_EXTERNAL_STORAGE-应用程序崩溃

[英]android.Manifest.permission.WRITE_EXTERNAL_STORAGE - application crashes

我正在检查权限,如果我的android应用程序具有WRITE_EXTERNAL_STORAGE的权限。 我已经在应用程序清单中添加了。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我正在使用代码:

 try{
           boolean hasPermission =this.checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
           if ( hasPermission) {
               Log.v("AppPerm", "Permission is granted");


               Toast.makeText(getBaseContext(), "Permission is granted", Toast.LENGTH_LONG)
                       .show();
           }
           else {
               msgbox("Error:Storage Permission Not Granted");
               Toast.makeText(getBaseContext(), "Error:Storage Permission Not Granted", Toast.LENGTH_LONG)
                       .show();
           }
       }catch (Exception e){
        Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG)
                       .show();
       }

当执行此代码(在Android版本5.1中 )时,应用程序崩溃,并显示以下错误:

不幸的是,该应用程序已停止。

我不希望应用程序崩溃,这不是在捕获错误吗?

像Google 文档一样:

  // Assume thisActivity is the current activity

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

如果应用程序具有该权限,则该方法返回PackageManager.PERMISSION_GRANTED ,并且该应用程序可以继续进行操作。 如果该应用程序没有该权限,则该方法返回PERMISSION_DENIED ,并且该应用程序必须明确向用户询问权限。

更新:这对我很有用:

public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(android.Manifest.permission. WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v("tag","Permission is granted");
            return true;
        } else {

            Log.v("tag","Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission. WRITE_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v("tag","Permission is granted");
        return true;
    }


}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
        Log.v("tag","Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    }
}

希望对您也有用。

您已经使用SDK版本溢出了权限检查部分。

在棒棒糖之前,您不需要运行时权限。 因此,获取SDK版本并将其放在if条件下。

希望对您有帮助...

暂无
暂无

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

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