2013-01-08 27 views
7

Tôi đang tìm kiếm một giải pháp mà tôi muốn để có được ứng dụng mở sử dụng hoặc cài đặt trên device.I mình có để có được mà ứng dụng được mở bởi người dùng từ BroadcastReceiver class.I tôi đã triển khai mã của tôi như sau:cách tải ứng dụng đã mở của người dùng?

public class AppReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 

    ActivityManager am = (ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE); 
    List l = am.getRunningAppProcesses(); 
    Iterator i = l.iterator(); 
    PackageManager pm = context.getPackageManager(); 
    while(i.hasNext()) { 
     ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
     try { 

     CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); 
     Log.v(" App Name : ", c.toString()); 


     }catch(Exception e) { 
     } 
    } 


} 

tôi cũng đã thêm về reciever này vào file manifest như:

<receiver android:name="AppReciever"> 
     <intent-filter> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
      <action android:name="android.intent.action.PACKAGE_CHANGED"></action> 
      <action android:name="android.intent.action.PACKAGE_INSTALL"></action> 
      <action android:name="android.intent.action.PACKAGE_REPLACED"></action> 
      <action android:name="android.intent.action.PACKAGE_RESTARTED"></action> 
    <data android:scheme="package" /> 

    </intent-filter> 
    </receiver> 

Từ mã AppReciver trên không thực hiện cho được những tên ứng dụng tại Log.v khi tôi mở ứng dụng mới mà đã tồn tại (cài đặt) trên device.It chỉ hoạt động khi một ứng dụng khác chạy trên thiết bị.

Vui lòng bất kỳ cơ quan nào giúp tôi lấy các ứng dụng đã mở hiện tại từ BroadcastReceiver

+0

Tôi nhận được tên ứng dụng chỉ package_added mới nhưng tôi phải nhận được nếu package_restarted/package_install/package_replaced/package_restarted –

+0

Tôi xin lỗi tôi không thể có được những gì bạn đang yêu cầu , bạn có thể thuật lại câu hỏi của mình cho tôi không? Bạn có muốn nhận tất cả các ứng dụng đã cài đặt không? –

Trả lời

2

Thêm vào sổ đăng ký dịch vụ của bạnReceiver(). Đừng quên hủy đăng ký nhận;

AppReceiver appReceiver = new AppReceiver(); 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.setPriority(900); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL); //@deprecated This constant has never been used. 
    intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED); 
    intentFilter.addAction(Intent.ACTION_PACKAGE_RESTARTED); 
    registerReceiver(appReceiver, intentFilter); 

Đối hủy đăng ký: unregisterReceiver(appReceiver);

+0

Có bất kỳ tác hại nào khi sử dụng Integer.MAX_VALUE mức độ ưu tiên không? – gonzobrains

+1

Từ tài liệu lớp IntentFilter cho giá trị SYSTEM_HIGH_PRIORITY: Ứng dụng sẽ không bao giờ sử dụng các bộ lọc có mức độ ưu tiên này hoặc cao hơn. – resource8218

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