Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách lấy kích thước thumbnail của Activity Task trên Android

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ặc QUERY_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.TaskDescription trong onCreate():

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)
}