2010-01-04 29 views
28

Có cách nào để lập danh sách tất cả content providers có sẵn trên thiết bị không? Không có trường hợp sử dụng thực sự, tôi chỉ nghĩ rằng nó có thể gọn gàng để xem những ứng dụng tôi đã cài đặt trên điện thoại của tôi có nhà cung cấp nội dung tiếp xúc.Nhận danh sách các Nhà cung cấp Nội dung có sẵn

+2

Bạn có thể chạy 'adb bugreport' từ dòng lệnh sẽ đổ * tấn * thông tin về thiết bị đang hoạt động, bao gồm nhiều thông tin về mỗi gói và mọi thứ họ cung cấp: hoạt động, dịch vụ, nhà cung cấp nội dung. .. –

+0

bản sao có thể có của [Danh sách nhà cung cấp nội dung Android] (http://stackoverflow.com/questions/1187541/android-content-provider-list) – richq

Trả lời

50

Bạn có thể thực hiện bằng cách gọi PackageManager.getInstalledPackages() với GET_PROVIDERS.

EDIT: Ví dụ:

for (PackageInfo pack : getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS)) { 
     ProviderInfo[] providers = pack.providers; 
     if (providers != null) { 
      for (ProviderInfo provider : providers) { 
       Log.d("Example", "provider: " + provider.authority); 
      } 
     } 
    } 
+2

Tôi có thể in ra một danh sách các nhà cung cấp, nhưng làm cách nào tôi có thể xác định nội dung thực tế có thể được truy vấn? Có ProviderInfo chứa URI tôi có thể chuyển vào một cuộc gọi query() không? – gonzobrains

+0

@gonzobrains Không bao giờ bạn biết điều đó cho đến khi bạn giải phóng tiết lộ ứng dụng của họ :) – dhams

+1

Tôi đang tìm kiếm Dấu trang URI cho một thiết bị cụ thể. Tôi không thể tìm thấy nội dung: // browser/bookmarks uri bằng mã của bạn? bất kỳ ý tưởng về làm thế nào để tìm đúng uir Bookmark? (xem câu hỏi của tôi http://stackoverflow.com/questions/28040445/android-browser-bookmarks-uri-does-not-work-on-all-device-how-to-find-out-the-c) – Pascal

13

tôi đã sử dụng lệnh adb shell như $ adb shell dumpsys > dumpsys.txt này và tìm kiếm các nhà cung cấp nội dung chuỗi trong tập tin đầu ra. Từ đó tôi có thể thấy danh sách các nhà cung cấp nội dung trong thiết bị/trình mô phỏng.

7
List<ProviderInfo> providers = getContext().getPackageManager() 
    .queryContentProviders(null, 0, 0); 

liệt kê tất cả nhà cung cấp nội dung có sẵn cho bạn trên thiết bị này.

Hoặc, nếu bạn biết tên quy trình và UID của nhà cung cấp, bạn có thể giảm danh sách bằng cách chỉ định hai tham số đó. Tôi đã sử dụng này trước khi để kiểm tra sự tồn tại của riêng cung cấp nội dung của tôi, đặc biệt hơn những người trước đó (so với miễn phí thanh toán) cài đặt:

List<ProviderInfo> providers = getContext().getPackageManager() 
    .queryContentProviders("com.mypackage", Process.myUid(), 0); 

Lưu ý android.os.Process.myUid() để có được ID người dùng trình riêng của tôi.

16

Từ dòng lệnh, hãy chạy:

adb shell dumpsys | grep Provider{

Note nẹp khai mạc. Điều này sẽ cung cấp cho bạn một danh sách ngắn của tất cả các nhà cung cấp được cài đặt thông qua các gói khác nhau.

1
List<ProviderInfo> returnList = new ArrayList<ProvderInfo>(); 
    for (PackageInfo pack:getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS)) 
    { 
    ProviderInfo[] providers = pack.providers; 
    if (providers != null) 
    { 
     returnList.addAll(Arrays.asList(providers)); 
    } 
} 
return returnList; 
Các vấn đề liên quan