【问题标题】:Display all messaging apps installed in Android phone显示 Android 手机中安装的所有消息应用程序
【发布时间】:2020-06-08 03:39:07
【问题描述】:

我想显示用户在其手机中安装的所有消息应用程序。我期待的列表是 WhatsApp、Facebook messenger、Viber、Slack、Skype、WeChat 等(如果已安装)。所以,到目前为止,我已经尝试通过以下代码获取 Phone 中的所有应用程序:

        val pm: PackageManager = context!!.packageManager
        val i = Intent(Intent.ACTION_MAIN)
        i.addCategory(Intent.CATEGORY_LAUNCHER)
        val lst = pm.queryIntentActivities(i, 0)

        for (resolveInfo in lst) {
            Log.d(
                "Test",
                "New Launcher Found: " + resolveInfo.activityInfo.packageName
            )

这只会给我 Slack 应用程序,而不是其他消息应用程序。我感觉这与 Google 文档中提到的 MIME 类型有关。

text/*, senders will often send text/plain, text/rtf, text/html, text/json
image/*, senders will often send image/jpg, image/png, image/gif
video/*, senders will often send video/mp4, video/3gp

但我不知道如何使用此信息。任何帮助,将不胜感激。蒂亚!

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    在创建意图时添加ACTION_SENDTO作为操作参数,您应该会看到能够处理消息/短信等的应用列表。

    val intent = Intent(Intent.ACTION_SENDTO) // get list of activities that can handle this type of intent val lst = pm.queryIntentActivities(intent, 0)

    【讨论】:

    • 我确实想发送数据,但我需要先知道所有消息传递应用程序的列表,例如 com.Slack、com.viber.voip,这样我才能以我想要的方式显示它们。
    • 你可以在pm.queryIntentActivities(i, 0中传递相同的intent对象来得到想要的结果。
    【解决方案2】:

    这里的包名是指-apps包名

       fun appinstalled(){
        var app_names = mutableListOf<String>()
        val app_package = mutableListOf<String>()
        val packagelist: MutableList<PackageInfo> =  packageManager.getInstalledPackages(0)
        var appname : String
        var packname : String
    
    
        for (i in packagelist.indices) {
            val packageinfo : PackageInfo= packagelist[i]
    
    
            appname=packageinfo.applicationInfo.loadLabel(packageManager).toString()
            packname=packageinfo.packageName
            app.add(appname)
            app-package.add(packname)
    
    
    
    
        }
    

    这将列出用户设备中安装的应用程序及其软件包名称。在此之后将这些列表附加到 Listview 及其 adpater 并完成。

    【讨论】:

    • 如果您在下面遇到任何问题评论
    • 谢谢@DikShU ,无意冒犯,但问题是关于获取消息传递应用程序,或具有消息传递功能的应用程序,如 Fb messenger、viber 等,您上面提到的代码是用于设备中的完整应用程序列表。已经有大量相同的解决方案可用于获取所有应用程序。简而言之,请阅读问题,这不是我要找的。​​span>
    • @androidStud 为此,您可以比较 2 个列表并从那里创建一个通用列表,因为第一个列表包含所有应用程序名称,其他您必须创建一个包含所有社交消息应用程序名称的列表,然后组合和比较两者
    • 我正在寻找一个通用的解决方案。市场上时不时会出现一个新的消息传递应用程序,因此制作静态列表不是一个可行的解决方案,但无论如何我通过查看应用程序的权限并确定它是否是消息传递应用程序找到了解决方案。
    • 如果您找到任何解决方案,请在此处更新解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多