試圖讓Android選擇器顯示可供用戶啓動存儲在本地文件夾中的PDF文件的操作。 當我通過文件名如/data/user/0/myappappname/files/output.pdf(當然存在),我得到一個很好的選擇器與所有可以接受PDF文件的應用程序。但是,當我選擇其中的任何一個時,出現錯誤(來自外部應用程序)文檔路徑無效。不會引發異常。Android:我如何構建*完整*路徑傳遞給Intent.CreateChooser
然後我試圖(用於測試目的),以FNAME設置類似/storage/emulated/0/Download/TLCL.pdf(文件還存在),一切工作正常。
起初,我以爲這有什麼文件權限做(因爲第一個路徑是專用於我的應用程序),但後來我發現標誌ActivityFlags.GrantReadUriPermission正是爲了給其他臨時授權文件訪問的目的建造應用。結果仍然相同。
由於這是一個Xamarin.forms項目,我在選擇文件創建位置方面有限(我使用PCLStorage,它總是寫入app-private,本地文件夾),所以我沒有生成文件的選項在/文檔,/下載等。
我顯然做錯了什麼。任何想法讚賞。
是否有一個選項,以獲取來自系統全路徑,包括/存儲/模擬/ 0部分(或任何這將是在其他設備上)?也許這會有所幫助?
一段代碼:
(mime類型被定義爲 「應用程序/ PDF」 更早)
public async Task<bool> LaunchFile(string fname, string mimeType)
{
var uri = Android.Net.Uri.Parse("file://" + fname);
var intent = new Intent(Intent.ActionView);
intent.SetDataAndType(uri, mimeType);
intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask | ActivityFlags.GrantReadUriPermission);
try
{
Forms.Context.StartActivity(Intent.CreateChooser(intent, "ChooseApp"));
return true;
}
catch (Exception ex)
{
Debug.WriteLine("LaunchFile: " + ex.Message);
return false;
}
嘿,這看起來像一個很好的解決方法。明天我會先試一試。感謝您花費時間和精力。我會等待一段時間,看看是否有人能解決我原來的問題(無需導出到公共文件夾),如果沒有 - 這就是我將要做的。 – bocko