2010-07-21 41 views

Trả lời

9

Bạn có thể nhận thông tin về quy trình đang chạy sử dụng lớp học ActivityManager.

11

Bạn không có thể phát hiện một mắt App trong Android, nhưng bạn có thể nhận được danh sách các ứng dụng đang mở và kiểm tra xem ứng dụng bạn đang muốn tìm mở hoặc không sử dụng đoạn mã sau:

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses(); 

for (int i = 0; i < runningAppProcessInfo.size(); i++) { 
    if(runningAppProcessInfo.get(i).processName.equals("com.the.app.you.are.looking.for")) { 
    // Do your stuff here. 
    } 
} 

Bạn cũng có thể kiểm tra xem các ứng dụng đang chạy ở mặt trước sử dụng phương pháp này

public static boolean isForeground(Context ctx, String myPackage){ 
    ActivityManager manager = (ActivityManager) ctx.getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(1); 

    ComponentName componentInfo = runningTaskInfo.get(0).topActivity; 
    if(componentInfo.getPackageName().equals(myPackage)) { 
     return true; 
    }  
    return false; 
} 
+2

Đoạn mã đầu tiên ở trên hoạt động tuyệt vời cho các ứng dụng đang chạy trong bối cảnh. Cảm ơn. – mbonness

+1

Nó không hoạt động trong mọi trường hợp. Ví dụ, tôi đã mở chrome và đóng bằng cách sử dụng nút home. Và tôi có thể thấy "Chrome" trên danh sách "lịch sử ứng dụng"/"ứng dụng đang chạy". Và tôi đã quét sạch Chrome từ đó. Vẫn mã ở trên cho biết "Chrome" đang chạy trên nền. – Manu

+0

@Manu Có lẽ quá trình vẫn còn đó, sau đó? –

2
public static String getActiveApps(Context context) { 

    PackageManager pm = context.getPackageManager(); 
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

    String value = u.dateStamp(); // basic date stamp 
    value += "---------------------------------\n"; 
    value += "Active Apps\n"; 
    value += "=================================\n"; 

    for (ApplicationInfo packageInfo : packages) { 

     //system apps! get out 
     if (!isSTOPPED(packageInfo) && !isSYSTEM(packageInfo)) { 

      value += getApplicationLabel(context, packageInfo.packageName) + "\n" + packageInfo.packageName + "\n-----------------------\n"; 

     } 
    } 

    return value; 

    //result on my emulator 

    /* 2 Ekim 2017 Pazartesi 14:35:17 
    --------------------------------- 
    Active Apps 
    ================================= 
    SystemSetting 
    com.xyz.systemsetting 
    ----------------------- 
    myMail 
    com.my.mail 
    ----------------------- 
    X-plore 
    com.lonelycatgames.Xplore 
    ----------------------- 
    Renotify 
    com.liamlang.renotify 
    ----------------------- 
    Mail Box 
    com.mailbox.email 
    ----------------------- */ 


} 

some opened apps

isSTOPPED

private static boolean isSTOPPED(ApplicationInfo pkgInfo) { 

    return ((pkgInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0); 
} 

isSYSTEM

private static boolean isSYSTEM(ApplicationInfo pkgInfo) { 

    return ((pkgInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0); 
} 

getApplicationLabel

public static String getApplicationLabel(Context context, String packageName) { 

    PackageManager  packageManager = context.getPackageManager(); 
    List<ApplicationInfo> packages  = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); 
    String    label   = null; 

    for (int i = 0; i < packages.size(); i++) { 

     ApplicationInfo temp = packages.get(i); 

     if (temp.packageName.equals(packageName)) 
      label = packageManager.getApplicationLabel(temp).toString(); 
    } 

    return label; 
} 
+0

Ít dự phòng, nhưng đã hoạt động ở android N. –

Các vấn đề liên quan