2010-01-04 20 views
28

¿Hay alguna manera de enumerar programáticamente todos los content providers disponibles en un dispositivo? No es un caso de uso real, solo pensé que sería bueno ver qué aplicaciones tengo instaladas en mi teléfono que tienen proveedores de contenido expuestos.Obtenga una lista de proveedores de contenido disponibles

+2

Puede ejecutar 'bugreport' adb desde la línea de comandos que volcar una tonelada * * de información sobre el dispositivo activo, incluyendo un montón de información acerca de cada paquete y todo lo que ofrecen: actividades, servicios, proveedores de contenido. .. –

+0

posible duplicado de [Lista de proveedores de contenido de Android] (http://stackoverflow.com/questions/1187541/android-content-provider-list) – richq

Respuesta

50

Debería ser posible llamando al PackageManager.getInstalledPackages() con GET_PROVIDERS.

EDITAR: ejemplo:

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

Pude imprimir una lista de proveedores, pero ¿cómo puedo determinar el contenido real que se puede consultar? ¿ProviderInfo contiene el URI que puedo pasar a una llamada a query()? – gonzobrains

+0

@gonzobrains No, nunca lo sabrás hasta que liberen la secreta de su aplicación :) – dhams

+1

Estoy buscando el URI de marcadores para un dispositivo determinado. No puedo encontrar contenido: // navegador/marcadores uri usando tu código? alguna idea sobre cómo encontrar el marcador adecuado uir? (vea mi pregunta http://stackoverflow.com/questions/28040445/android-browser-bookmarks-uri-does-not-work-on-all-device-how-to-find-out-the-c) – Pascal

13

que utiliza comando adb shell como esto $ adb shell dumpsys > dumpsys.txt y la búsqueda de proveedores de contenido cadena en el archivo de salida. De eso puedo ver la lista de proveedores de contenido en el dispositivo/emulador.

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

enumera todos los proveedores de contenido disponibles para ti en este dispositivo.

O, si conoce el nombre del proceso y el UID del proveedor, puede reducir la lista especificando esos dos parámetros. He utilizado este antes para comprobar la existencia de mis propios proveedores de contenido, más específicamente aquéllos de anterior (frente libre pagado): instalaciones

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

Nota del android.os.Process.myUid() para obtener el ID de usuario de mi propio proceso.

16

Desde la línea de comandos, ejecute:

adb shell dumpsys | grep Provider{

Nota la llave de apertura. Esto le dará una breve lista de todos los proveedores instalados a través de varios paquetes.

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; 
Cuestiones relacionadas