Android11适配已安装应用列表
之前做过已安装应用列表的适配,最近国内版SDK升级到33和隐私合规遇到很多问题,于是把已安装应用列表记录一下:
1、在Android11及以上的适配:
package com.example.requestinsttallapplistdemoimport 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 = 0val len = packList.sizewhile (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.requestinsttallapplistdemoimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundleclass 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