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

Lấy danh sách ứng dụng đang chạy trên Android bằng Kotlin

Hướng dẫn này minh họa cách lấy danh sách ứng dụng đang chạy (running applications) theo chương trình trong Android sử dụng Kotlin.

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textAlignment="center"
        android:textColor="@android:color/background_dark"
        android:textSize="24sp"
        android:textStyle="bold" />

</RelativeLayout>

Bước 3: Viết code MainActivity.kt

import android.app.ActivityManager
import android.app.ActivityManager.RunningTaskInfo
import android.content.Context
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import java.util.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        val textView: TextView = findViewById(R.id.textView)
        val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        val recentTasks: List<RunningTaskInfo> = activityManager.getRunningTasks(Int.MAX_VALUE)

        val sb = StringBuilder()
        for (i in recentTasks.indices) {
            sb.append("App ${i + 1}: ${recentTasks[i].baseActivity?.toShortString()}\n")
            sb.append("Task ID: ${recentTasks[i].id}\n\n")
        }
        textView.text = sb.toString()
    }
}

Bước 4: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.q11">

    <uses-permission android:name="android.permission.GET_TASKS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. TextView sẽ hiển thị danh sách các task/app gần đây với package name và task ID.

Lưu ý quan trọng về phiên bản Android

Android VersionAPI LevelgetRunningTasks()
Android 4.4 (KitKat) trở xuống≤ 19Hoạt động bình thường
Android 5.0 (Lollipop) - 5.121-22Chỉ trả về task của app mình
Android 6.0 (Marshmallow) trở lên≥ 23Deprecated, trả về rỗng hoặc chỉ app mình

Cách hiện đại (Android 5.0+): UsageStatsManager

val usageStatsManager = getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager
val endTime = System.currentTimeMillis()
val beginTime = endTime - 1000 * 60 * 60 * 24 // 24h trước
val stats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, beginTime, endTime)
stats?.let { list ->
    list.sortByDescending { it.lastTimeUsed }
    for (usage in list.take(10)) {
        println("${usage.packageName} - Last used: ${usage.lastTimeUsed}")
    }
}

Yêu cầu quyền PACKAGE_USAGE_STATS (người dùng phải bật trong Settings > Security > Apps with usage access).