versiones sistema pie operativo developer app android

pie - android sistema operativo



java.lang.SecurityException: DenegaciĆ³n de permiso: proveedor de apertura com.google.android.apps.photos.content.GooglePhotosImageProvider (2)

Si bien la adición del permiso funciona para este proveedor de contenido en particular, no funcionará si sus datos son entregados por otros proveedores de contenido (en Android no hay garantía de que obtenga un proveedor de contenido específico a menos que acceda explícitamente a ese proveedor de contenido).

La solución "final" a este problema se puede encontrar aquí:

Accediendo con permisos temporales.

Puede acceder a los datos en un proveedor de contenido, incluso si no tiene los permisos de acceso adecuados, enviando un intento a una aplicación que tenga los permisos y devolviendo un intento de resultado que contenga permisos "URI". Estos son permisos para un URI de contenido específico que dura hasta que finaliza la actividad que los recibe .

http://developer.android.com/guide/topics/providers/content-provider-basics.html

Desde la versión 4.3, Android verifica si la actividad de recepción aún se está ejecutando y, si no, lanza la excepción SecurityException. DeterminCorrectScale es un método estático, por lo que supongo que, al menos, a veces se lo llama fuera del ciclo de vida de la actividad. Para solucionar este problema de una vez por todas, debe recuperar los datos del proveedor de contenido mientras se está ejecutando la Actividad. No conozco los requisitos de su aplicación, pero si no hay un trabajo pesado (como copiar imágenes del proveedor de contenido), entonces hágalo en el hilo de la interfaz de usuario. Si necesita levantar objetos pesados, use una AsyncTask iniciada por la Actividad, pero luego debe asegurarse de que la Actividad no termine antes de que se recuperen los datos (lo que podría ser complicado).

No solo agregué esa respuesta porque creo que es la correcta, sino porque otros desarrolladores pueden no estar conscientes de este cambio introducido en 4.3 / 4.4 y pueden tener el mismo problema con otros proveedores de contenido.

De repente, comencé a recibir la siguiente excepción de los dispositivos con Android 4.3 y superior

java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.content.GooglePhotosImageProvider from ProcessRecord{454ca9d0 5914:com.propertymanager/u0a10231} (pid=5914, uid=10231) requires com.google.android.apps.photos.permission.GOOGLE_PHOTOS or com.google.android.apps.photos.permission.GOOGLE_PHOTOS at android.os.Parcel.readException(Parcel.java:1431) at android.os.Parcel.readException(Parcel.java:1385) at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2896) at android.app.ActivityThread.acquireProvider(ActivityThread.java:4755) at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2480) at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1152) at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:759) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:665) at android.content.ContentResolver.openInputStream(ContentResolver.java:500) at com.myapp.xxxx.determineCorrectScale(SourceFile:148)

Mi El código que lo causa es

public static int determineCorrectScale(Context con, Uri imagUri) { int scale = 1; InputStream imageStream = null; imageStream = con.getContentResolver().openInputStream(imagUri); . . . }

¿¿Alguna ayuda??

EDITAR: Así es como le permito al usuario elegir una imagen antes de llamar al método anterior.

Intent choosePictureIntent = new Intent(Intent.ACTION_PICK, Images.Media.INTERNAL_CONTENT_URI); tartActivityForResult(choosePictureIntent, REQUEST_CHOOSE_IMAGE);

Aquí está el OnActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == RESULT_OK) { switch (requestCode) { case REQUEST_CHOOSE_IMAGE: Uri selectedImage = intent.getData(); try { int scale = CommonFunc.determineCorrectScale(this, selectedImage);


necesitas agregar este permiso a tu manifiesto:

<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>

Espero que esto funcione para usted. por favor dame un comentario