簡體   English   中英

Android:使用第三方應用程序打開私人文件

[英]Android: Open private file with third party app

我正在制作一個可以從Internet下載文件並允許用戶使用第三方應用程序打開這些文件的應用程序。 我使用getFilesDir()將這些文件存儲在我的私有應用程序目錄中。

但是,似乎第三方應用程序無法訪問這些文件,因為當我嘗試打開它們時(使用像這樣的第三方應用程序選擇器),它無法打開該文件。 我是否需要啟用許可才能與其他應用程序共享文件?

編輯:似乎要使用File Provider ,您需要指定要為其提供訪問權限的3rd-party-app的程序包名稱。 這是正確的,還是有一種解決方法來提供常規的第三方訪問?

在這種情況下,建議的操作方式是讓您的應用程序充當FileProvider ,從而將文件的臨時訪問權限授予第三方應用程序。

或者,您可以使用DownloadManager組件下載文件,並將其保存在設備上的特定位置。 如果您要下載的文件不是您應用程序的私有文件,並且您想讓第三方組件永久訪問它們,請使用下載管理器觸發對下載文件的媒體掃描,這將使它們可通過以下方式使用MediaStore到其他應用程序。

與必須自己處理文件的下載相比,使用DownloadManager具有一些優點,並且在用戶體驗方面以更自然的方式集成。

您有兩個選擇。

將應用程序注冊為FileProvider

您在Android文檔中擁有完整且更新的示例: https : //developer.android.com/reference/android/support/v4/content/FileProvider.html

如果要提供對任何第三方應用程序的訪問權限,可以使用以下解決方法:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
(...)
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
    String packageName = resolveInfo.activityInfo.packageName;
    context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

將文件保存在大容量存儲單元(sdcard)中

例如:

File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/newDir");
dir.mkdirs();
File file = new File(dir, "filename");

FileOutputStream f = new FileOutputStream(file);
...

選擇哪一個

這取決於您的目標。

如果您希望用戶通過usb來訪問文件,甚至在卸載您的應用程序后也可以使它們可用,則不要將那些文件的“已用空間”添加到您的應用程序中,...單位方式”是要走的路。

如果您希望這些文件“捆綁”到您的應用程序,僅在安裝您的應用程序時可用,只能通過您的應用程序訪問,...“文件提供者方式”是您可以使用的方式。

在Android中,如果不是明智的數據,“大容量存儲單元方式”似乎是可取的。 Android用戶不喜歡“鏈” /限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM