2012-01-18 30 views
10

Tôi có một ứng dụng lưu nhật ký các ứng dụng được phát triển nội bộ được cài đặt trên thiết bị. Sau khi cài đặt một máy thu phát sóng cho Intent.PACKAGE_ADDED được gọi và ghi lại tên gói sử dụng đoạn mã sau:Cách tìm tên gói đã được gỡ cài đặt khi sử dụng Intent.ACTION_PACKAGE_REMOVED

public class NewInstallReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationInstalled(packages); 
    } 
} 

Vấn đề tôi đang phải đối mặt là khi sử dụng một máy thu phát sóng cho Intent.PACKAGE_REMOVED, tất cả các tham chiếu đến các gói thông qua Id duy nhất (UID) trở lại với thông tin null (Như bạn mong đợi, đã được gỡ cài đặt). Tôi có một giải pháp tạm thời cho thời gian đó, nhưng nó không phải là rất thanh lịch, và cho phiên bản tiếp theo tôi muốn có mã sạch hơn. Một ví dụ về cách mã nên làm việc:

public class RemoveApplicationReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     int uid = b.getInt(Intent.EXTRA_UID); 
     String[] packages = context.getPackageManager().getPackagesForUid(uid); 

     ApplicationService appService = new ApplicationService(context); 
     appService.ApplicationRemoved(packages); 
    } 

} 

Vì vậy, để tóm tắt, câu hỏi là:

thế nào, sau khi một chương trình đã được gỡ bỏ, tôi có thể tham khảo các tên gói trong một máy thu phát sóng cho Intent. PACKAGE_REMOVED.

Cảm ơn

+0

Tôi cũng nhận được null từ getPackagesForUid (uid). Những gì tôi muốn là để có được danh sách của tất cả các gói cài đặt cho người dùng hiện tại. Có thể cung cấp một số đầu vào? – Pratik

Trả lời

13

Các gói phần mềm tên là trong tiếp cận mục đích bạn nhận được từ BroadcasReceiver, sử dụng "getData()" chức năng, có ComponentMame của cài đặt/gỡ bỏ cài đặt gói.

+12

Làm việc tuyệt vời ... chỉ cần sử dụng getData(). GetSchemeSpecificPart(). Cảm ơn – Kennifer

+4

Khi tôi in ra intent.toString() Tôi có thể thấy tên gói, nhưng khi tôi sử dụng intent.getData(). GetSchemeSpecificPart() Tôi nhận được một chuỗi rỗng. Tôi đang làm gì sai? – gonzobrains

+3

@gonzobrains Bạn có lẽ đã không đặt kế hoạch? Trong tệp kê khai, nó sẽ giống như sau: ''. –

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