2011-12-17 22 views
15

CÂU HỎI CỦA TÔI: Tôi có thể sử dụng những gì để truy xuất số processName hoặc packageName của một quy trình nhất định được cấp PID?Android - Cách lấy processName hoặc packageName bằng cách sử dụng PID?

Vì trong trình quản lý tác vụ, tôi muốn sử dụng PID trong khi sử dụng mã killBackgroundProcesses để tiêu diệt các quy trình. Vấn đề là tôi cần packageName/processName để làm điều đó và nó sẽ là một rắc rối cho người dùng nếu tôi yêu cầu họ gõ vào processName hơn là chỉ cần gõ PID của nó.

đây là hình ảnh của công việc quản lý của tôi:

http://i.imgur.com/1zpXg.jpg

+1

Không phải những gì bạn hỏi, nhưng có lẽ trong phiên bản cuối cùng của công việc quản lý của bạn, bạn muốn cho phép người dùng bấm vào để chọn những ứng dụng để giết, hoặc sử dụng hộp kiểm . Có họ gõ PID trong có vẻ như một bước bổ sung, không cần thiết. –

+0

Yup, đó là kế hoạch lý tưởng của tôi. Tuy nhiên, tôi không biết cách sử dụng hộp kiểm hoặc nhấp để chọn phương thức. Đó là lý do tại sao tôi đã chọn làm phương pháp này trước. Nhưng nếu bạn đã có một ý tưởng về cách làm điều đó, nó sẽ thực sự giúp tôi rất nhiều. : D – Loren

+1

Bạn có thể thử [ListView] (http://developer.android.com/reference/android/widget/ListView.html) hoặc cho các hộp kiểm, có hướng dẫn tại đây (http: // www. anddev.org/checkbox_text_list___extension_of_iconified_text_tutorial-t771.html). –

Trả lời

10

Xin chào, bạn có thể sử dụng mã này, nó làm việc cho tôi trong Android 2.3.3:

private String getAppName(int pID) 
{ 
    String processName = ""; 
    ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); 
    List l = am.getRunningAppProcesses(); 
    Iterator i = l.iterator(); 
    PackageManager pm = this.getPackageManager(); 
    while(i.hasNext()) 
    { 
      ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
      try 
      { 
       if(info.pid == pID) 
       { 
        CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); 
        //Log.d("Process", "Id: "+ info.pid +" ProcessName: "+ info.processName +" Label: "+c.toString()); 
        //processName = c.toString(); 
        processName = info.processName; 
       } 
      } 
      catch(Exception e) 
      { 
       //Log.d("Process", "Error>> :"+ e.toString()); 
      } 
    } 
    return processName; 
} 
+0

Cảm ơn bạn đã nhập mã. Tôi chỉ cố gắng tìm ra nó đầu tiên vì tôi không thông thạo trong Android và đã lâu rồi tôi mới lập trình bất cứ thứ gì. :) – Loren

+0

Tôi muốn hỏi Log.d làm gì? – Loren

+0

Đối với cửa sổ Nhật ký (Log.d), hãy xem: http://stackoverflow.com/questions/4584103/log-in-android-development –

2

Kill quá trình khác là ý tưởng chung xấu ..

Nhìn vào Câu hỏi này Android process killerandroid task kill ..

Và cũng này blog Android: Killing a running process with processid(pid) and package name

Và cho câu hỏi của bạn để có được Tên Process từ pid sau đó

Cái gì đó như,

Cài đặt một terminal emulator, khởi động nó và chạy:

ps | grep 10058 

ps liệt kê các quá trình và các bộ lọc grep cho ID bạn muốn.

Nhưng điều này chỉ hoạt động nếu ứng dụng đang chạy khi bạn chạy lệnh.

+0

Yup, tôi đã đọc nhiều lần. Tuy nhiên, đó là một dự án trong lớp của chúng tôi vì vậy tôi không có lựa chọn nào khác ngoài việc tuân thủ các yêu cầu. Cảm ơn bạn đã giúp đỡ. – Loren

+1

nhận 'grep không tìm thấy' trong terminal – Gabor

+0

Bàn điều khiển android của tôi không có' grep', Android 4.4 CyanogenMod – dazito

19

Mã này là một phiên bản đơn giản của mã Yaqub của. Tôi sử dụng như một phương pháp tĩnh trong một lớp học Util:

public static String getAppNameByPID(Context context, int pid){ 
    ActivityManager manager 
       = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 

    for(RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()){ 
     if(processInfo.pid == pid){ 
      return processInfo.processName; 
     } 
    } 
    return ""; 
} 
+0

Xin lỗi tôi không nhận được điểm của bạn Các pid mà chúng tôi đang chuyển đến chức năng này chúng tôi đã nhận được từ đối tượng RunningAppProcessInfo thay vì chuyển đến hàm này và một lần nữa lấy danh sách tất cả các ứng dụng đang chạy, chúng ta có thể trực tiếp gọi thuộc tính từ đối tượng RunningAppProcessInfo i, e processInfo.processName – Naveed

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