java - 如何将应用设置为默认应用或让用户选择应用?

标签 java android kotlin android-manifest intentfilter

目前我正在尝试创建一堆简单的 Android 应用来替换默认应用。

我已经在 this post 中看到了如何将短信应用设置为默认:

<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="vnd.android-dir/mms-sms" />
</intent-filter>

但我想知道如何为这些应用实现同样的效果:

  • 相机应用(拍照)
  • 图库/照片应用程序(选择和查看图像)
  • 联系人应用程序(查看、编辑、删除和调用联系人)
  • 电话应用程序(调用联系人/电话号码和接听来电)
  • 互联网浏览器应用程序(浏览互联网)
  • 键盘应用程序(像在默认键盘中一样编写文本)
  • 启动器应用程序(在主屏幕上显示所有已安装的应用程序)

我已经注意到,在没有用户交互的情况下,几乎不可能以编程方式将应用设置为默认应用。这将是主要目标,但如果用户可以选择他们想要使用的应用程序作为默认应用程序也是可以的。但我想确保我上面列出的应用程序是可选择的。所以我的问题是,我必须将哪些 mime 类型添加到 android list 文件中的 Intent 过滤器?

最佳答案

So my question is, what mime types I have to add to the intent filters in the android manifest file?

mimetype 只是描述内容的标准,是下一个处理。这在 Android 中并不是什么新鲜事,您可以查看有关媒体类型的更多信息 Wiki page . Android Documentation 中关于 mimetype 属性的此信息:

android:mimeType - A MIME media type, such as image/jpeg or audio/mpeg4-generic. The subtype can be the asterisk wildcard to indicate that any subtype matches

但是,您可以看到 MIME 类型上的 vnd 前缀是“供应商前缀”,这意味着它不是正式的 IETF MIME 类型。因此,您需要为每个应用程序检查此类型。只是一些例子,我们在下面。

注意!为了设置默认应用程序,您需要先指定 android.intent.action。因为它是进程交互之间的主要标志,所以Launcher(例如)不会有mimetype,只有intent actions android.intent.action.MAIN, android.intent.action.SET_WALLPAPER.


相机:

<data android:mimeType="vnd.android.cursor.dir/image" />
<data android:mimeType="vnd.android.cursor.dir/video" />

图像/视频/音频:

<data android:mimeType="video/*" />
<data android:mimeType="video/mpeg4" />
<data android:mimeType="video/mp4" />
<data android:mimeType="video/3gp" />
......
<data android:mimeType="image/*" />
<data android:mimeType="application/sdp" />
......
<data android:mimeType="audio/x-mpegurl" />
<data android:mimeType="audio/mpegurl" />
<data android:mimeType="application/vnd.apple.mpegurl" />
<data android:mimeType="application/x-mpegurl" />
....

联系人:

<data android:mimeType="vnd.android.cursor.item/phone" />
<data android:mimeType="vnd.android.cursor.item/person" />
<data android:mimeType="vnd.android.cursor.dir/calls" />

浏览器:

<data android:mimeType="application/xhtml+xml"/>
<data android:mimeType="application/vnd.wap.xhtml+xml"/>
<data android:mimeType="vnd.android.cursor.item/postal-address" />
<data android:mimeType="vnd.android.cursor.dir/bookmark"/>
<data android:mimeType="vnd.android.cursor.item/download"/>

关于java - 如何将应用设置为默认应用或让用户选择应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55237504/

相关文章:

java - 将链接列表保存到文件(元素不正确)

java - 如何将线性搜索转换为二进制搜索?

java - 在循环、Java 和 Android 中使用方法

java - Android使用抽屉导航滑动菜单

java - 将 SubLime 与我的 javadoc 集成

android - 找不到apk文件

Android Dropbox 访问 token

spring-mvc - 使用 Spring MVC 测试框架测试安全的 REST 端点

gradle - Kotlin Web应用|链接css文件

java - 在Kotlin中乘以小数