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

How to set apps as default or let the user select the app?

目前我正在尝试创建一些简单的 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>

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

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

您需要为您希望您的应用程序成为其默认应用程序的文件类型、操作或类别注册 Intent Filter。然后,用户可以根据需要选择您的应用作为默认应用。

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

只有通过 root 访问才能强制将您的应用设置为默认应用。

我不确定,但使用 Intent.createChooser() 你会得到解决方案 click here

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

mimetype只是描述内容的标准,下一步处理。这不是 Android 中的新内容,您可以查看有关媒体类型的更多信息 Wiki page. This information about mimetype attribute in the the Android Documentation:

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 前缀是 "vendor prefix",这意味着它 不是 官方 IETF MIME 类型。因此,您需要为每个应用程序检查此类型。只是一些例子,我们在下面有什么。

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


相机:

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

Image/Video/Audio:

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