[英]Open a url to a file in Android without using a browser
我正在嘗試Android開發。 我正在制作一個應用程序,它將允許用戶瀏覽Web服務中的文件並查看它們。 這些文件可以是任何文件:文本,pdf,圖片等。
以前,我將文件下載到外部存儲,然后調用Intent.SetDataAndType()
並將URL傳遞給文件。 這將導致Android設備啟動應用選擇器,並讓用戶選擇適當的方法來查看文件。
但是由於我不想讓用戶編輯文件而只看文件,所以將文件下載到存儲中似乎很愚蠢; 我不想閑逛的文件。 由於可以通過URL獲取文件,所以為什么不將其作為參數傳遞給Intent.SetDataAndType()
呢?
我試過了 第一個問題是,假定文件名是Web服務調用的名稱,並且它似乎比mime類型更重要。 我將Web服務更改為與試圖下載的任何文件相同的名稱。 那解決了那個問題。
因此,現在正在打開文件。 但是它總是在Web瀏覽器中打開。 我可以選擇網絡瀏覽器,但是我希望有另一個應用程序打開它。
我的代碼如下所示:
Intent i = new Intent(Intent.ActionView);
i.SetDataAndType(Android.Net.Uri.Parse(GetUrlToFile(fileref, fileName)), mimeType);
i.SetFlags(ActivityFlags.GrantReadUriPermission);
i.SetFlags(ActivityFlags.NewTask);
i.SetFlags(ActivityFlags.ClearWhenTaskReset); // so if the app is relaunched, we don't show the display application.
StartActivity(i);
代碼在C#中,因為我使用的是Xamarin,但我認為這不會有所作為。
我嘗試使用StartActivity(Intent.CreateChooser(i, "Open me"));
但這並沒有給我更多選擇的余地。
是否有人對如何執行此操作有任何想法?
我還沒有找到執行此操作的方法,所以我經歷了一個變通方法。
我沒有使用URL,而是將我的應用程序也更改為內容提供商。 現在,當我想要打開文件時,我創建了一個引用我的應用程序中文件的URI,並將其傳遞給Intent。 當此意圖與我的應用程序聯系時,我將文件本地下載到我的緩存目錄中並返回。
我的代碼已更改為:
Intent i = new Intent(Intent.ActionView);
i.SetDataAndType(Android.Net.Uri.Parse("content://com.sample.erik.provider/files/" + id), mimeType);
i.SetFlags(ActivityFlags.GrantReadUriPermission);
i.SetFlags(ActivityFlags.NewTask);
i.SetFlags(ActivityFlags.ClearWhenTaskReset); // so if the app is relaunched, we don't show the display application.
StartActivity(i);
然后,我有自己的內容提供程序,該程序在OpenFile()
完成大部分工作
public override ParcelFileDescriptor OpenFile(Android.Net.Uri uri, string mode)
{
switch (sUriMatcher.Match(uri))
{
case FILE_ID:
if (mode != "r")
throw new Java.Lang.UnsupportedOperationException("Do not support write access: " + uri);
String id = uri.LastPathSegment;
Java.IO.File file = new Java.IO.File(Application.Context.CacheDir, id);
DownloadToFile(file, id);
return ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
default:
throw new Java.Lang.IllegalArgumentException("Unknown Uri: " + uri);
}
}
這不是我最初的計划,但是這種方式似乎可以很好地滿足我的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.