Giới thiệu
Bài viết hướng dẫn lấy kích thước thumbnail (hình thu nhỏ) của task trong Recent Apps screen thông qua ActivityManager.getAppTaskThumbnailSize(). Thường dùng cho custom recents hoặc system UI.
Các bước thực hiện
Bước 1: Tạo project mới
Android Studio → File → New Project → Empty Activity.
Bước 2: Giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="16dp">
<TextView
android:id="@+id/tvThumbnailSize"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Task Thumbnail Size"
android:textSize="18sp" />
</LinearLayout>
Bước 3: Code (MainActivity.kt)
package com.example.taskthumbnailsize
import android.app.ActivityManager
import android.content.Context
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val size = activityManager.getAppTaskThumbnailSize()
tvThumbnailSize.text = "Task Thumbnail Size: ${size.x} x ${size.y} px"
}
}
Giải thích
getAppTaskThumbnailSize(): Trả vềPoint(x=width, y=height) pixel của thumbnail trong Recent Apps.- Kích thước này do hệ thống xác định, phụ thuộc vào density, screen size, và launcher.
- Thường dùng bởi System UI, Launcher, hoặc app custom recents screen.
Lấy thumbnail bitmap thực tế (API 21+)
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val tasks = activityManager.getAppTasks()
for (task in tasks) {
val taskInfo = task.taskInfo
if (taskInfo != null) {
// Lấy thumbnail bitmap
val thumbnail = taskInfo.getThumbnail()
if (thumbnail != null) {
// Hiển thị bitmap
imageView.setImageBitmap(thumbnail)
}
// Hoặc lấy description (chứa icon, label)
val description = taskInfo.description
}
}
Lưu ý
- Cần quyền
GET_TASKS(deprecated API 21) hoặcQUERY_ALL_PACKAGES(API 30+) để lấy task của app khác. - App chỉ có thể lấy thumbnail của chính task của nó mà không cần quyền đặc biệt.
- Thumbnail được hệ thống capture tự động khi app vào background.
- Có thể tùy chỉnh thumbnail bằng
ActivityManager.TaskDescriptiontrongonCreate():
Tùy chỉnh Task Description (Thumbnail custom)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Set custom thumbnail cho recent apps
val taskDescription = ActivityManager.TaskDescription(
label = "My Custom Label",
icon = BitmapFactory.decodeResource(resources, R.drawable.ic_launcher_foreground),
colorPrimary = resources.getColor(R.color.primary, theme),
colorPrimaryDark = resources.getColor(R.color.primary_dark, theme),
colorBackground = resources.getColor(R.color.background, theme)
)
setTaskDescription(taskDescription)
}