【问题标题】:android: grant access to write on external beside manifestandroid:授予在清单旁边的外部写入权限
【发布时间】:2016-09-19 12:53:22
【问题描述】:

我在清单里面:

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

但是当我运行应用程序时(它应该创建并弹出一张卡片作为图像),图像没有创建。

然后我手动更改应用的权限(启用外部存储权限:settings-&gt;applications-&gt;Myapp-&gt;permissions),应用运行正常。

我该如何解决这个问题?

【问题讨论】:

  • 在我的清单中我有:uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
  • 该手机的版本

标签: android image android-manifest android-permissions android-external-storage


【解决方案1】:

如果您的版本低于 android 6 (Marshmallow),您可以使用此代码而无需检查权限:

final int REQUEST_CODE = 1;

ActivityCompat.requestPermissions(activity,
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE);

否则你需要一种不同的方法:

    public static boolean checkIfPermissionNeeded(Activity activity) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
   activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED){
     return true;
    }

    return false;
    }

如果返回true,您可以使用第一个块中的代码。

所以:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case REQUEST_CODE:

            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //task may be continued
                permission = true;
            }
            else{
                //task cancelled
                permission = false;

            }
            break;

    }
}

在您的活动中,如果权限为true,您可以继续执行所需的操作。

【讨论】:

  • 那么,这与MM和第一次使用时授予权限有关吗?还是我错了?
  • 是的。因为在 MM 中,每次您需要用户允许应用程序使用某些功能时,都会弹出一个对话框。因此,许可可以是真的也可以不是;我应该更具体。
猜你喜欢
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
相关资源
最近更新 更多