2017-05-08 83 views
0

我試圖更新我的代碼,它獲取數據庫文件。我試圖用FileProvider代替。Android的FileProvider.GetUriForFile切斷了URI的開始

我有點卡住,因爲原始文件路徑是"/storage/emulated/0/Android/data/com.abc/files/abcMobile.db3」

我需要它由FileProvider.GetUriForFile返回到包括URI「/存儲/模擬/ 0 /「在它的開始。

這裏是我的代碼:

Log.Info ("directory", GetDirectory (dir).ToString()); 
       Log.Info ("filename", filename); 
       File newFile = new File (GetDirectory (dir).AbsolutePath, "/" + filename); 
       Android.Net.Uri androidContentUri = FileProvider.GetUriForFile (Application.Context, Application.Context.PackageName + ".fileprovider", newFile); 
       System.Uri systemContentUri = SystemUri (androidContentUri); 
       return systemContentUri; 

在上面我已經創建了具有"/storage/emulated/0/Android/data/com.abc/files/abcMobile.db3」的路徑,但是當我的文件傳遞給FileProvider.GetUriForFile()這似乎創造了一個一Android.Net.URI文件中的代碼,我將它投射到System.Net.URI,變成{content://com.abc.fileprovider/Android/data/com.abc/files/abcMobile.db3}

我只需要弄清楚爲什麼它從Android.Net.Uri開始刪除"/storage/emulated/0/「,並停止發生,然後它應該工作。有任何想法嗎?

回答

1

我只需要弄清楚爲什麼它會刪除「/存儲/模擬/ 0 /「從Android.Net.Uri的啓動和停止這樣的事情發生,然後它應該工作。任何想法?

因爲你生成的內容URI爲您的文件,其中給予臨時權限訪問此文件。返回文件的完整路徑是不被認爲是一種安全的方式。

而如果你是指「生成文件的內容URI」部分FileProvider。您將找到以下語句:

要與使用內容URI的其他應用程序共享文件,您的應用程序必須生成內容URI。

...

由於前面的代碼片斷的結果,getUriForFile()返回內容URI內容://com.mydomain.fileprovider/my_images/default_image.jpg。

因此,這是ContentOri的預期形式,由FileProvider返回。