package com.yjrqc.lfss.screen.Apptest
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Environment
import android.util.Log
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Button
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
@Composable
fun InstalledAppsScreen() {
val context = LocalContext.current
val installedApps = remember { mutableStateListOf<AppInfo>() }
LaunchedEffect(key1 = true) {
installedApps.clear()
installedApps.addAll(getInstalledApps(context.packageManager))
}
LazyColumn {
items(installedApps) { appInfo ->
Row {
Text(appInfo.name)
Text(appInfo.packageName)
}
val imageBitmap = (appInfo.icon as BitmapDrawable).bitmap.asImageBitmap()
// Use Image component to display the bitmap
Image(
bitmap = imageBitmap,
contentDescription = null,
modifier = Modifier.size(48.dp) // You can set the size as needed
)
Text(text = appInfo.apkPath)
Button(onClick = {
dowload(appInfo.apkPath)
}) {
Text(text = "下载")
}
}
}
}
data class AppInfo(
val name: String,
val packageName: String,
val icon:Drawable,
val apkPath:String
)
fun getInstalledApps(packageManager: PackageManager): List<AppInfo> {
val apps = mutableListOf<AppInfo>()
val intent = Intent(Intent.ACTION_MAIN, null).addCategory(Intent.CATEGORY_LAUNCHER)
val resolveInfoList = packageManager.queryIntentActivities(intent, 0)
for (resolveInfo in resolveInfoList) {
val appInfo = resolveInfo.activityInfo.applicationInfo
val appInfo2 = resolveInfo.activityInfo.applicationInfo.loadIcon(packageManager)
val apkPath = resolveInfo.activityInfo.applicationInfo.publicSourceDir
val icon = resolveInfo.activityInfo
if (appInfo.flags and ApplicationInfo.FLAG_SYSTEM == 0) {
// Skip system apps
apps.add(AppInfo(appInfo.loadLabel(packageManager).toString(), appInfo.packageName,appInfo2,apkPath))
}
}
return apps
}
fun dowload(apkPath:String){
val destinationPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/${apkPath}.apk"
// 复制APK文件
val inputStream: InputStream = File(apkPath).inputStream()
val outputStream: OutputStream = FileOutputStream(destinationPath)
inputStream.copyTo(outputStream)
inputStream.close()
outputStream.close()
Log.d("ttt",destinationPath)
}
@Composable
fun qqq() {
}
@Preview
@Composable
fun qqqPreview() {
InstalledAppsScreen()
}
02-03
684
12-16
7696