【问题标题】:How to set apps as default or let the user select the app?如何将应用设置为默认应用或让用户选择应用?
【发布时间】:2019-03-19 09:26:12
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java android kotlin android-manifest intentfilter


    【解决方案1】:

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

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

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

    但是,您可以看到 MIME 类型上的 vnd 前缀是“供应商前缀”,这意味着它不是正式的 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" />
    

    图像/视频/音频:

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

    【讨论】:

      【解决方案2】:

      您需要为您希望您的应用成为默认应用的文件类型、操作或类别注册一个 Intent 过滤器。然后,用户可以根据需要选择您的应用作为默认应用。

      查看here 了解有关 Intent 和 Intent 过滤器的更多信息。

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

      【讨论】:

      • 感谢您的回答。正如我已经提到的,我知道我必须将意图过滤器添加到 android 清单中。我一直在寻找 mime 类型来指定应用程序的功能,因此它们是可选的。以及如何将应用设置为具有 root 访问权限的默认应用?
      【解决方案3】:

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

      【讨论】:

      • 感谢您的回答。但这并不是我想要的,因为每次都会弹出选择器。这不会影响我以外的其他应用程序(例如,如果我点击另一个应用程序中的链接/url,这将不会打开我的互联网浏览器应用程序)
      猜你喜欢
      • 2014-05-18
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      相关资源
      最近更新 更多