簡體   English   中英

在android文件系統上的寫權限

[英]Writing permission on android filesystems

我應該在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;

    }

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

1如果僅出於演示目的,則可以通過進入設置->應用程序->權限來手動授予對應用程序的許可。 然后允許所有必需的權限。

2您必須實現運行時權限,以便用戶可以允許其運行時。

您必須在運行時授予“寫”權限。

可以實現以下目標...

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");
    }
  }
}

替換此行

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

至:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM