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

时间:2019-03-19 09:26:12

标签: java android kotlin android-manifest intentfilter

目前,我正在尝试创建一堆简单的Android应用程序,以用它们替换默认应用程序。

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

<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>

但是我想知道如何为这些应用程序实现相同的目标:

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

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

3 个答案:

答案 0 :(得分:5)

您需要为要使其应用程序成为默认应用程序的文件类型,操作或类别注册一个意图过滤器。然后,用户可以根据需要选择您的应用作为默认应用。

查看here,以获取有关Intent和Intent过滤器的更多信息。

只有通过root用户访问权限,才能将您的应用强制为默认应用。

答案 1 :(得分:2)

我不确定,但是使用Intent.createChooser()您将获得解决方案 click here

答案 2 :(得分:2)

  

所以我的问题是,我必须在android清单文件中的意图过滤器中添加哪些mime类型?

mimetype只是描述内容的标准,是下一步处理。这不是Android中的新功能,您可以查看有关媒体类型Wiki page的更多信息。 Android Documentation中有关mimetype属性的信息:

  

android:mimeType-MIME媒体类型,例如image / jpeg或audio / mpeg4-generic。子类型可以是星号通配符,以指示任何子类型匹配

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

注意!为了设置默认应用程序,您需要首先指定android.intent.action。因为它是流程交互之间的主要标志,所以启动器(例如)将没有mimetype,只有意图动作 {strong> android.intent.action.MAINandroid.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"/>