Here is how I defined my activity in my AndroidManifest.xml to get this to work.
<activity android:name="com.keepassdroid.PasswordActivity">
<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" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\.kdb" />
<data android:host="*" />
</intent-filter>
</activity>
The scheme
of file
indicates that this should happen when a local file is opened (rather than protocol like HTTP).
mimeType
can be set to */*
to match any mime type.
pathPattern
is where you specify what extension you want to match (in this example .kdb
). The .*
at the beginning matches any squence of characters. These strings require double escaping, so \\.
matches a literal period. Then, you end with your file extension. One caveat with pathPattern is that .*
is not a greedy match like you would expect if this was a regular expression. This pattern will fail to match paths that contain a .
before the .kdb
. For a more detailed discussion of this issue and a workaround see here
Finally, according to the Android documentation, both host
and scheme
attributes are required for the pathPattern
attribute to work, so just set that to the wildcard to match anything.
Now, if you select a .kdb
file in an app like Linda File Manager, my app shows up as an option. I should note that this alone does not allow you to download this filetype in a browser, since this only registers with the file scheme. Having an app like Linda File Manager on your phone resisters itself generically allowing you to download any file type.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…