我已经编写了以下意图过滤器以使用我的应用程序打开文本文件。它似乎有效,但仅在某些时候。例如,如果我通过电子邮件发送文本文件,如果选择从邮件打开,则不会显示我的应用程序。如果我选择先保存然后打开,则将显示我的应用程序。与保管箱类似的经验,如果我尝试从保管箱打开,我的应用将不会被列为能够打开,但是如果我从保管箱导出到sd并使用文件管理器将其打开,则会列出我的应用并作品。
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<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="http" android:host="*" android:pathPattern=".*\\.txt" />
<data android:scheme="https" android:host="*" android:pathPattern=".*\\.txt" />
<!-- <data android:scheme="content" android:host="*" android:pathPattern=".*\\.txt" /> -->
<data android:scheme="file" android:host="*" android:mimeType="*/*" android:pathPattern=".*\\.txt" />
</intent-filter>
最佳答案
Dropbox和电子邮件应用程序可能使用内容提供程序,并且与pathPattern
不匹配。通常,内容提供程序不包含文件扩展名,而是使用mime类型指示要打开的文件类型。如果您打算打开任何text/plain
文件,而不必只打开扩展名为.txt
的文件,那么最好完全关闭pathPattern
。
<intent-filter>
<data android:mimeType="text/plain" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>