Android11适配安装应用列表

之前做过已安装应用列表适配,最近国内版SDK升级到33和隐私合规遇到很多问题,于是把已安装应用列表记录一下:

1、在Android11及以上的适配

package com.example.requestinsttallapplistdemo

import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.ApplicationInfo

/**
 * @author:njb
 * @date: 2023/12/3 20:36
 * @desc:描述
 **/
object Utils {
    /**
     * 获取手机已安装应用列表
     * @param context
     * @return
     */
    @SuppressLint("QueryPermissionsNeeded")
    fun getAllApps(context: Context): List<String> {
        val apps: MutableList<String> = ArrayList()
        val packageManager = context.packageManager
        // 获取手机内所有应用
        val packList = packageManager.getInstalledApplications(0)
        var i = 0
        val len = packList.size
        while (i < len) {
            val pak = packList[i]
            // if()里的值如果<=0则为自己装的程序,否则为系统工程自带
            if (pak.flags and ApplicationInfo.FLAG_SYSTEM <= 0) {
                // 添加自己已经安装的应用程序
                apps.add(pak.packageName)
            }
            i++
        }
        return apps
    }
}

在这里插入图片描述

2、添加获取所有应用列表权限

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
    tools:ignore="QueryAllPackagesPermission" />
<uses-permission android:name="android.permission.GET_TASKS"/>

3、通过包名查找

这里以QQ、wx登录为例

<queries>
    <package android:name="com.tencent.mobileqq" />
    <package android:name="com.tencent.tim" />
    <package android:name="com.tencent.mm"/>
    <package android:name="com.tencent.minihd.qq" />
    <package android:name="com.tencent.qqlite" />
</queries>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.blowing.demo"
    <queries>
        <intent>
             <action android:name="android.intent.action.SEND"/>
             <data android:mimeType="image/png"/>
        </intent>
    </queries>
</manifest>


4、简单调用

package com.example.requestinsttallapplistdemo

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initData()
    }

    private fun initData() {
        Utils.getAllApps(this)
    }
}

5、实现效果如下

在这里插入图片描述

6、demo源码地址如下

https://gitee.com/jackning_admin/installapplist-demo

原文地址:https://blog.csdn.net/u012556114/article/details/134770535

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34810.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注