当前位置: 首页 > article >正文

Android11适配已安装应用列表

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/install-applist-demo


http://www.kler.cn/news/161409.html

相关文章:

  • ZKP Understanding Nova (2) Relaxed R1CS
  • ESP32-Web-Server编程- 在 Web 上开发动态纪念册
  • 二叉树的层平均值[中等]
  • Python作业答疑_6.22~6.25
  • C语言基础概念考查备忘 - 标识符、关键字、预定义标识符、语法检查、语义检查 ... 左值、右值、对象、副作用、未定义行为、sizeof是什么等等
  • 26.Oracle11g的数据装载
  • Zabbix 6.0部署+自定义监控项+自动发现与自动注册+部署zabbix代理服务器
  • 【跨境营商】创新科技助力数码转型 增强大湾区企业核心竞争力
  • 08-中介者模式-C语言实现
  • HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例
  • 如何配置WinDbg和VMware实现内核的调试
  • appium :输入框控件为android.view.View 时输入内容(如:验证码、密码输入框)
  • Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
  • Java SpringBoot Controller常见写法
  • SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel | 京东云技术团队
  • 【开源视频联动物联网平台】视频接入网关的用法
  • 关于Kotlin Coroutines你可能会犯的 7 个错误
  • JVM 运行时参数
  • Linux C语言 40-进程间通信IPC之消息队列
  • 【微服务】springboot整合quartz使用详解
  • 基于Java+Swing+Mysql图书管理系统(含实训报告)
  • Linux-进程之间的通信
  • 【UE5】使用场系统炸毁一堵墙
  • C# 使用FluentScheduler触发定时任务
  • 视频分割方法:批量剪辑高效分割视频,提取m3u8视频技巧
  • 什么是数据架构
  • uniapp 使用 flex布局 将 图片展示 循环排列两列
  • 微信小程序中生命周期钩子函数
  • Python Tornado 框架的终极指南!
  • 交易历史记录20231207 记录