2017-08-09 59 views
0

我試圖用文件提供打開在牛軋糖中的一個文件牛軋糖打開文件,看到一些例子,並添加提供程序來體現和創造的providerpath XML如下:無法使用自定義文件提供

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities="${applicationId}.provider" 
    android:exported="false" 
    android:grantUriPermissions="true"> 
    <meta-data 
     android:name="android.support.FILE_PROVIDER_PATHS" 
     android:resource="@xml/provider_paths"/> 
</provider> 

provider_path .XML

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path 
     name="/" 
     path="." /> 
</paths> 

代碼打開文件:

  Intent intent = new Intent(); 
      intent.setAction(android.content.Intent.ACTION_VIEW); 
      File file = new File(path); 

      MimeTypeMap mime = MimeTypeMap.getSingleton(); 
      String ext = file.getName().substring(file.getName().indexOf(".") + 1); 
      String type = mime.getMimeTypeFromExtension(ext); 
      Log.d(TAG, file.getAbsolutePath() + "mime " + type + " ext " + ext + "uri file " + FileProvider.getUriForFile(context, 
        BuildConfig.APPLICATION_ID + ".provider", 
        file).toString()); 
      Uri ur = UriHelper.getNougatUri(file); 
      Log.d(TAG, "uri2 " + ur); 
      intent.setDataAndType(FileProvider.getUriForFile(context, 
        BuildConfig.APPLICATION_ID + ".provider", 
        file), type); 
      context.startActivity(intent); 

logcat的:

08-09 12:04:39.728 18288-18288/com.app.tod D/ChatAdapter1: /storage/emulated/0/com.app.tod/Media/sent/08-09-2017 12:04 PM.jpegmime image/jpeg ext jpeguri file content://com.app.tod.provider/%2Fstorage%2Femulated%2F0%2Fcom.app.tod%2F/com.app.toado/Media/sent/08-09-2017%2012%3A04%20PM.jpeg 
08-09 12:04:39.729 18288-18288/com.app.tod D/ChatAdapter1: uri2 content://com.app.tod.provider/storage/emulated/0/com.app.tod/Media/sent/08-09-2017 12:04 PM.jpeg 

當我在文件上點擊進入畫廊,並說圖片無法加載, 圖像在這個路徑 - 存在

/storage/emulated/0/com.app.tod/Media/sent/08-09-2017 12:04 PM.jpeg 

可有人請告訴我如何可以訪問所有我爲我的應用程序創建的文件夾中的文件位於/storage/emulated/0/com.app.tod/

另外,如果我想在內部存儲的其他位置打開文件,有沒有辦法?

謝謝。

+0

只需使用'ContentResolver' API獲取'Uri'內容 – pskink

+0

@pskink可以請給我一些鏈接或一些代碼在我的情況下如何做到這一點? – Ghanendra

+0

@pskink我也不想打開JPEG或視頻文件,我也想打開文件,如PDF等 – Ghanendra

回答

1

當我點擊它進入畫廊,並說圖片不能加載

您還沒有添加FLAG_GRANT_READ_URI_PERMISSIONIntent等第三方應用無法讀取標識的內容的文件您的Uri

另請注意,您的UriHelper.getNougatUri(file);似乎沒用,因爲您對結果所做的全部操作都是將其記錄到LogCat中。

+0

謝謝!請你看看這個[https://stackoverflow.com/questions/45628865/how-to-change-open-in-gallery-intent-to-done](question)!我想建立一個意圖,選擇圖像和視頻,而不是'打開'我想要'好'或'完成',以在選擇完成後顯示 – Ghanendra

相關問題