2016-12-29 36 views
0

我有西里爾名稱的文件:Android的7打開文件西里爾名

File file = new File(cyr_name); 

,我嘗試在其他應用程序打開它:

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file), "text/plain"); 
startActivity(intent); 

在Android版本6是沒有問題的。 的Android 7是錯誤:

28-12 20:54:25.018 21665 21665 E AndroidRuntime: android.os.FileUriExposedException: file:///storage/emulated/0/ws/%D0%9C%D0%B5%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B9_%D0%A3%D0%BD%D0%B5%D1%81%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%B2%D0%B5%D1%82%D1%80%D0%BE%D0%BC%20%D0%9A%D0%BD%D0%B8%D0%B3%D0%B0%20%D1%87%D0%B5%D1%82%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D1%8F.txt exposed beyond app through Intent.getData() 

發生了什麼事7的Android?

回答

1

它與西里爾文無關,這是因爲您使用的文件模式意圖不能再傳遞給其他應用程序。您必須將內容意圖傳遞給FileProvider或設置安全策略來覆蓋此行爲。有關使用FileProvider的示例,請參閱https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en

如果你去那條路線,這裏是覆蓋安全策略的方法。它設置了將文件意圖暴露給日誌而不是進程死亡的懲罰。在發送意圖之前,您可以將其放置在某些onCreate()中。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      StrictMode.VmPolicy policy = new StrictMode.VmPolicy.Builder() 
        .detectAll() 
        .penaltyLog() 
        .build(); 
      StrictMode.setVmPolicy(policy); 
} 
+0

謝謝!謝謝! – SmallSani