2011-05-28 70 views
14

Xin chào Tôi muốn có danh sách tất cả các ứng dụng đã cài đặt trên thiết bị của người dùng Tôi đã googling trong thời gian dài nhất nhưng không thể tìm thấy những gì tôi muốn liên kết này gần nhất và hoạt động tốt ngoại trừ tôi là người mới không hiểu cách sử dụng phương thức getPackages(); và tạo ra một danh sách với nóLấy danh sách các ứng dụng Android đã cài đặt

http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

Bất kỳ giúp đỡ về làm thế nào để tạo ra các danh sách thực tế sẽ là một trợ giúp lớn tôi có tất cả những mã đã có trong chỉ không thể có được danh sách để thực hiện lòng biết ơn sự giúp đỡ nào

+0

Rất nhiều thứ nhưng không có gì không ép buộc hoặc cho tôi lỗi phương pháp có vẻ trả về danh sách mảng nhưng mới làm quen với điều này tôi không biết cách hiển thị trong danh sách trên màn hình như chế độ xem danh sách – user577732

Trả lời

57

Gần đây tôi đã làm việc trên một cái gì đó như thế này. Một điều tôi sẽ nói lên phía trước là để chắc chắn và thực hiện điều này trong một thread riêng biệt - truy vấn thông tin ứng dụng là SLOW. Sau đây sẽ giúp bạn có được danh sách tất cả các ứng dụng đã cài đặt. Điều này sẽ bao gồm rất nhiều ứng dụng hệ thống mà bạn có thể không quan tâm đến.

PackageManager pm = getPackageManager(); 
List<ApplicationInfo> apps = pm.getInstalledApplications(0); 

Để hạn chế nó để chỉ người dùng cài đặt hoặc cập nhật hệ thống ứng dụng (ví dụ như Maps, Gmail, vv), tôi đã sử dụng sau logic:

List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>(); 

for(ApplicationInfo app : apps) { 
    //checks for flags; if flagged, check if updated system app 
    if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { 
     installedApps.add(app); 
    //it's a system app, not interested 
    } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
     //Discard this one 
    //in this case, it should be a user-installed app 
    } else { 
     installedApps.add(app); 
    } 
} 

EDIT: Ngoài ra, để có được tên và biểu tượng cho ứng dụng (mà có lẽ những gì diễn dài nhất - tôi đã không thực hiện bất kỳ kiểm tra sâu thực vào nó - sử dụng này:

String label = (String)pm.getApplicationLabel(app); 
Drawable icon = pm.getApplicationIcon(app); 

insta lledApps nên có một danh sách đầy đủ các ứng dụng bạn cần, ngay bây giờ. Hy vọng điều này sẽ giúp, nhưng bạn có thể phải sửa đổi logic một chút tùy thuộc vào ứng dụng bạn cần phải trả lại. Một lần nữa, nó là SLOW, nhưng nó chỉ là một cái gì đó bạn phải làm việc xung quanh. Bạn có thể muốn xây dựng một bộ nhớ cache dữ liệu trong cơ sở dữ liệu nếu đó là thứ bạn sẽ truy cập thường xuyên.

+0

không có tôi chủ yếu quan tâm đến các ứng dụng hệ thống thực sự tôi viết ứng dụng gốc chỉ vì vậy hãy xem điều này ngay bây giờ nhờ – user577732

+0

Hãy xem xét sử dụng bộ điều hợp. Nó sẽ làm cho danh sách cuộn choppier, nhưng sẽ tải ngay lập tức, không có vấn đề lớn như thế nào là danh sách. – tacone

+0

Tôi muốn truy cập các quy trình đang chạy (ứng dụng người dùng và ứng dụng hệ thống đã cài đặt riêng). Bạn có thể giúp tôi không? –

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