2010-01-04 16 views
28

की एक सूची प्राप्त करें क्या किसी डिवाइस पर सभी उपलब्ध content providers प्रोग्रामेटिक रूप से सूचीबद्ध करने का कोई तरीका है? कोई वास्तविक उपयोग केस नहीं, मैंने सोचा कि यह देखने के लिए साफ हो सकता है कि मैंने अपने फोन पर कौन से ऐप्स इंस्टॉल किए हैं, जिन्होंने सामग्री प्रदाताओं का खुलासा किया है।उपलब्ध सामग्री प्रदाता

+2

आप 'कमांड लाइन जो सक्रिय डिवाइस के बारे में जानकारी का एक * टन * डंप हो जाएगा प्रत्येक पैकेज और सब कुछ वे प्रदान के बारे में जानकारी का भार भी शामिल है, से एडीबी bugreport' चला सकते हैं: गतिविधियों, सेवाओं, सामग्री प्रदाताओं। .. –

+0

[एंड्रॉइड सामग्री प्रदाता सूची] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1187541/android-content-provider-list) – richq

उत्तर

50

PackageManager.getInstalledPackages() को GET_PROVIDERS के साथ कॉल करके यह संभव होना चाहिए।

संपादित: उदाहरण:

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

मैं प्रदाताओं की एक सूची मुद्रित करने में सक्षम था, लेकिन मैं कैसे निर्धारित कर सकता हूं वास्तविक सामग्री जो पूछताछ की जा सकती है? क्या ProviderInfo में यूआरआई होता है मैं एक क्वेरी() कॉल में पास कर सकता हूं? – gonzobrains

+0

@gonzobrains आप इसे तब तक नहीं जानते जब तक कि आप अपने आवेदन की छत को छोड़ दें :) – dhams

+1

मैं किसी दिए गए डिवाइस के लिए बुकमार्क यूआरआई खोज रहा हूं। मैं सामग्री नहीं ढूंढ सकता: // ब्राउज़र/बुकमार्क यूरी आपके कोड का उपयोग कर? सही यूआईआर बुकमार्क कैसे करें इस बारे में कोई विचार? (मेरा प्रश्न देखें http://stackoverflow.com/questions/28040445/android-browser-bookmarks-uri-does-not-work-on-all-device-how-to-find-out-the-c) – Pascal

13

मैं आउटपुट फ़ाइल में सामग्री प्रदाताओं स्ट्रिंग के लिए खोज इस $ adb shell dumpsys > dumpsys.txt तरह adb शेल कमांड का इस्तेमाल किया और। उस से मैं डिवाइस/एमुलेटर में सामग्री प्रदाताओं की सूची देख सकता हूं।

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

इस डिवाइस पर आपके लिए उपलब्ध सभी सामग्री प्रदाताओं को सूचीबद्ध करता है।

या, यदि आप प्रदाता का प्रक्रिया नाम और यूआईडी जानते हैं, तो आप उन दो पैरामीटर निर्दिष्ट करके सूची को कम कर सकते हैं। मैं इस का इस्तेमाल किया है और विशेष रूप से मेरी खुद सामग्री प्रदाताओं के अस्तित्व की जाँच करने से पहले पिछले (मुक्त बनाम भुगतान) के उन प्रतिष्ठानों:

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

नोट android.os.Process.myUid() अपने ही प्रक्रिया के उपयोगकर्ता आईडी प्राप्त करने के लिए।

16

कमांड लाइन से, चलाएँ:

adb shell dumpsys | grep Provider{

नोट उद्घाटन ब्रेस। यह आपको विभिन्न पैकेजों के माध्यम से स्थापित सभी प्रदाताओं की एक छोटी सूची देगा।

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; 
संबंधित मुद्दे