在android文件系统上的写权限

时间:2018-07-20 09:37:52

标签: java android xml

我应该在android数据文件夹中生成一个.pdf文件,以使用下面的Java代码,并在XML清单文件中启用权限。但是,当我运行代码时,出现以下异常。该应用程序在清单中具有不同的权限,应该都正确配置它们,我声明我正在旧的Android 4上测试该应用程序。如何解决此问题?这是什么原因? 异常:错误: java。 I. FileNotFoundException :/data/my.pdf: 打开失败:EACCES(权限被拒绝)

代码:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <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 android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE " />

    public static Boolean GeneratePDF(String base64) {
        Boolean ret = true;

        try {
       String direttorio=""+Environment.getDataDirectory().getAbsolutePath();
        final File dwldsPath = new File(direttorio + "/" + "my.pdf");
        byte[] pdfAsBytes = Base64.decode(base64, 0);
        FileOutputStream os;
        os = new FileOutputStream(dwldsPath, false);
        os.write(pdfAsBytes);
        os.flush();
        os.close();
    } catch (Exception ex) {
        System.out.println("\n Errore Generazione File: "+ex);
        ret = false;
    }
    return ret;

    }

3 个答案:

答案 0 :(得分:2)

如果您使用的是Android 6.0及更高版本, 可能有2种方式:

1,如果您仅出于演示目的,则可以手动授予应用权限     通过进入设置->应用程序->权限。然后允许所有许可     必填。

2您必须实现运行时权限,以便用户可以允许它运行。

答案 1 :(得分:1)

您必须在运行时授予“写”权限。

可以实现以下目标...

public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{

  private static final int REQUEST_WRITE_PERMISSION = 111;

  @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_WRITE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {            
        GeneratePDF("your String name");
    }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    requestPermission();
  }

  private void requestPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);
    } else {
       GeneratePDF("your String name");
    }
  }
}

答案 2 :(得分:0)

替换此行

String direttorio=""+Environment.getDataDirectory().getAbsolutePath();

收件人:

String direttorio= Environment.getExternalStorageDirectory().getAbsolutePath();
final File dwldsPath = new File(direttorio + "/" + my.pdf");