Imponga los permisos de propiedad de artículos en el proveedor de contenido

Tengo un proveedor de contenido exportado que se comparte entre varias de mis aplicaciones, y para el que un tercero podría ser libre de escribir sus propias aplicaciones una vez que he publicado la API.

En este momento cualquier aplicación cliente puede ejecutar cualquier operación CRUD en cualquier elemento del proveedor de contenido. Quiero hacer cumplir algunos permisos de acceso de tal manera que una aplicación solo puede modificar o eliminar elementos que creó, al tiempo que permite que cualquier aplicación lea todos los elementos del proveedor y cree nuevos elementos.

¿Hay alguna forma de que pueda acceder al UID de la aplicación que llama y almacenar que con los elementos de nueva creación, y luego comparar con ese valor en las operaciones futuras? ¿Sería mejor usar el nombre del paquete? Supongo que el UID podría cambiar si el usuario desinstaló y reinstaló una aplicación, y no quiero que pierdan el acceso a esos elementos si lo hacen.

Sí, puede hacer una comprobación del nombre del paquete. A continuación, le indicamos cómo puede recuperar el nombre del paquete basado en el uid de llamada:

private static Collection<String> getCallingPackages(Context context) { int callingUid = Binder.getCallingUid(); if (callingUid == 0) { return Collections.emptyList(); } String[] packages = context.getPackageManager().getPackagesForUid(callingUid); return new ArrayList<>(Arrays.asList(packages)); } 

Esto devuelve una lista de nombres de paquetes porque, para citar la documentación:

En la mayoría de los casos, será un nombre de paquete único, el paquete al que se le ha asignado ese identificador de usuario.

Cuando hay varios paquetes compartiendo el mismo identificador de usuario a través del mecanismo "sharedUserId", se devolverán todos los paquetes con ese id.

  • Eliminar varias filas de contentprovider
  • Singleton vs una clase interna estática para la clase de ayuda de base de datos en Android
  • El orden de instalar la aplicación está cambiando el comportamiento?
  • Android / SQLite: columnas de la tabla Insert-Update para mantener el identificador
  • Evitar el bucle de sincronización de red al sincronizar desde la red en Android ContentProvider
  • Creación de un calendario con el proveedor de contenido de Android 4.0 (ICS)
  • SecurityException: Permiso Error de denegación
  • ¿Cómo usar el proveedor de contenido de SMS? ¿Dónde están los documentos?
  • Editar / eliminar eventos de Google Calendar y obtener el ID de evento
  • ¿Dónde está la clase SampleZipfileProvider?
  • ¿Es posible acceder a recursos en otro APK sin utilizar proveedores de contenido?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.