簡體   English   中英

在下載/文檔文件夾中為文件類型/擴展名注冊 Android 應用程序

[英]Registering Android App for File Types/Extensions in Downloads/Documents folder

我目前正在嘗試在用戶單擊文件瀏覽器中的某個文件(例如.xyz )時打開我的應用程序。

我在清單文件中的代碼是

<intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="file"
                android:host="*" />
      <data android:scheme="content"
                android:host="*" />
      <data android:mimeType="application/octet-stream" />
      <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.xyz" />
      <data android:pathPattern=".*\\..*\\..*\\..*\\.xyz" />
      <data android:pathPattern=".*\\..*\\..*\\.xyz" />
      <data android:pathPattern=".*\\..*\\.xyz" />
      <data android:pathPattern=".*\\.xyz" />
      <data android:pathPattern="*.xyz" />
</intent-filter>

這似乎適用於存儲在手機存儲中的文件,例如 Android/ 文件夾中的文件,但不適用於存儲在 Documents 和 Downloads 位置的文件。 那是因為文件的 uri 有類似“ content://com.android.providers.downloads.documents/document/msf%3A45 ”的東西,所以 pathPattern 不適用於它並且文件瀏覽器顯示“可以” t 打開文件”。

當用戶在這兩個位置單擊擴展名為.xyz的文件時,有什么方法可以打開自己的應用程序? (我不希望應用程序打開任何二進制文件,只打開具有指定擴展名的文件)

我想到的另一種選擇是使用自定義 mime 類型來保存文件(例如application/my_xyz_type )然后更改行

<data android:mimeType="application/octet-stream" />

<data android:mimeType="application/my_xyz_type" />

但是當我使用values.put(MediaStore.MediaColumns.MIME_TYPE, "application/my_xyz_type")執行此操作時,該文件將保存為二進制文件,其中application/octet-stream作為 mime 類型。 因此,我假設不可能存儲具有自定義 mime 類型的文件。

“我目前正在嘗試在用戶在文件瀏覽器中單擊某個文件(例如 .xyz)時打開我的應用程序

在 Android 中,對於“自定義”文件擴展名來說,這從來都不是一個好的選擇,而且在現代版本中它是相當不現實的。

這似乎適用於存儲在手機存儲中的文件,例如在 Android/ 文件夾中

不必要。 行為會因操作系統版本和“文件瀏覽器”應用程序而異。

當用戶在這兩個位置單擊擴展名為 .xyz 的文件時,有什么方法可以打開自己的應用程序?

不。更一般地,您應該假設content Uri沒有有用的文件擴展名,就像httphttps Uri值通常沒有有用的文件擴展名一樣。

我想到的一種替代方法是使用自定義 mime 類型來保存文件

您的<intent-filter>不限於您的應用程序參與保存的文件。

因此,我假設無法存儲具有自定義 mime 類型的文件

這不會讓我感到驚訝,盡管我沒有親自嘗試過。 MediaStore可能會根據它願意支持的 MIME 類型列表檢查您提供的 MIME 類型,並且如果您的 MIME 類型不在列表中,則可能會默認交換application/octet-stream 這是另一件事,其行為可能因操作系統版本(也可能因設備制造商而異)而異。

暫無
暫無

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

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