我无法打开失败:尝试在Android 5.1中将数据写入SD卡时,出现EACCES(拒绝权限)错误,为什么? [英] I get open failed: EACCES (Permission denied) error when I try write data to SD card in Android 5.1, why?

查看:73
本文介绍了我无法打开失败:尝试在Android 5.1中将数据写入SD卡时,出现EACCES(拒绝权限)错误,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将一些数据保存到SD卡,我已经添加了权限到AndroidManifest.xml文件,并且在Android 4.12移动版中对其进行测试时可以得到正确的结果.

I need to save some data to SD card , I have add the permission to AndroidManifest.xml file, and I can get the correct result when I test it in Android 4.12 mobile.

但是我打开失败:在Android 5.1移动版中测试时,出现EACCES(权限被拒绝)错误,为什么?

But I get open failed: EACCES (Permission denied) error when I test it in Android 5.1 mobile, why?

顺便说一句,我已经阅读了> Android 6.0打开失败:EACCES(权限被拒绝)异常打开失败:EACCES(上的权限被拒绝)',但现在我的手机是三星Android 5.1

BTW, I have read the artical Android 6.0 open failed: EACCES (Permission denied) and Exception 'open failed: EACCES (Permission denied)' on Android , but now my mobile is SamSung Android 5.1

代码

 private void ActionUploadFiles(Map<String, String> files,IHTTPSession session,String uploadFolder){

        try{
            Set<String> keys = files.keySet();

            for (String key:keys) {
                String location = files.get(key);
                File source = new File(location);

                String filename= session.getParms().get(key);
                filename=FilenameUtils.getName(filename);

                File target = new File(uploadFolder,filename);

                FileUtils.copyFile(source,target);
            }
        }
        catch (Exception e) {
            Utility.LogError("Upload Error: "+ e.getMessage());
        }
    }

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.dodata.wifi">

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

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

    <uses-permission android:name="com.android.vending.BILLING" />

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {      
        multiDexEnabled true

        applicationId "info.dodata.wifi"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 4
        versionName "1.04"
        archivesBaseName = "WiFiFileTransfer-V" + versionName
    }

    productFlavors {
        free {
            applicationId "info.dodata.wifi"
        }

        pro {
            applicationId "info.dodata.wifi.pro"
        }
    }


    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "boolean", "IsDebugMode", "false"
        }

        debug {
            buildConfigField "boolean", "IsDebugMode", "true"
        }
    }

}

推荐答案

您缺少Android Lollipop引入的运行时权限.您可以做的就是启用权限.为此,请转到

You are missing the run-time permissions introduced from Android Lollipop. What you can do is enable permission. To do this, go to

设置->应用->YOUR_APP->权限

并启用权限,然后对其进行测试.

and enable permissions and then test it.

要添加运行时权限,可以在 onCreate()内部询问.

For adding run-time permission, you can ask inside onCreate().

String[] permission ={Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};

if(ContextCompat.checkSelfPermission(EditDisplayPicture.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
 && ContextCompat.checkSelfPermission(EditDisplayPicture.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ActivityCompat.requestPermissions(YourActivity.this, permission, 1);
    }
} else proceedFurther();

然后听这样的许可接受或拒绝,

And then listen for permission acceptance or denial like this,

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        proceedFurther();
    } else {
        Toast.makeText(YourActivity.this, "You need to give permission in order to proceed further.", Toast.LENGTH_SHORT).show();
    }
}

这篇关于我无法打开失败:尝试在Android 5.1中将数据写入SD卡时,出现EACCES(拒绝权限)错误,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆