ภาพรวม
ตัวอย่างนี้แสดงวิธีการดึงรายการแอปที่กำลังทำงานอยู่โดยใช้ ActivityManager (หมายเหตุ: API เปลี่ยนแปลงมากในเวอร์ชันใหม่)
⚠️ ข้อจำกัดสำคัญ
- API 21+ (Android 5.0+):
getRunningTasks()ถูกจำกัด คืนค่าเฉพาะ Task ของแอปตัวเอง - API 23+ (Android 6.0+): ต้องขอ Permission
PACKAGE_USAGE_STATS(Special Permission) - แนวทางใหม่: ใช้
UsageStatsManagerสำหรับดูสถิติการใช้งานแอป
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
เปิด Android Studio ไปที่ File → New Project แล้วกรอกข้อมูลที่จำเป็น
ขั้นตอนที่ 2: จัดรูปแบบหน้าจอ (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:textSize="16sp"
android:textStyle="bold" />
</RelativeLayout>
ขั้นตอนที่ 3: เขียนโค้ดหลัก (MainActivity.java) - วิธีเก่า (Deprecated)
package com.example.runningapps;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;
import java.util.Objects;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
// วิธีเก่า - ทำงานได้เต็มที่เฉพาะ API < 21
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List recentTasks = Objects.requireNonNull(activityManager).getRunningTasks(Integer.MAX_VALUE);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < recentTasks.size(); i++) {
sb.append("App: ").append(recentTasks.get(i).baseActivity.getPackageName())
.append("\nID: ").append(recentTasks.get(i).id).append("\n\n");
}
textView.setText(sb.toString());
}
}
วิธีใหม่: ใช้ UsageStatsManager (API 21+)
// ต้องขอ Permission ใน Manifest
// <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
// ในโค้ด
public void getRunningAppsModern() {
UsageStatsManager usm = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
long now = System.currentTimeMillis();
long beginTime = now - 1000 * 60 * 60; // 1 ชั่วโมงย้อนหลัง
List statsList = usm.queryUsageStats(UsageStatsManager.INTERVAL_BEST, beginTime, now);
if (statsList != null) {
for (UsageStats stats : statsList) {
if (stats.getLastTimeUsed() > 0) {
Log.d("RunningApp", "Package: " + stats.getPackageName() + " Last used: " + new Date(stats.getLastTimeUsed()));
}
}
}
}
ขั้นตอนที่ 4: ตั้งค่า Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
package="com.example.runningapps">
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
<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>
การทดสอบ
รันแอปพลิเคชันบนอุปกรณ์จริง (API < 21 จะเห็นรายการเต็ม, API 21+ จะเห็นเฉพาะแอปตัวเอง)

สรุป
สำหรับแอปสมัยใหม่ ควรใช้ UsageStatsManager พร้อมขอ Permission จากผู้ใช้ (นำไปหน้าตั้งค่า Usage Access) แทน getRunningTasks() ที่ถูก Deprecated