我应该在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;
}
答案 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");