Grant uri permiso para uri en EXTRA_STREAM en intención
Con FLAG_GRANT_READ_URI_PERMISSION
en la intención que pasó a startActivity
, podemos conceder permiso Uri
si el uri se establece mediante setData
. Pero si el Uri
en poner en EXTRA_STREAM
, el Uri
no se concede antes de jeallybean .
Sé que podemos utilizar grantUriPermission
seguido de un revokeUriPermission
para anular el permiso concedido. Pero parece que no hay un buen lugar para ejecutar revokeUriPermission
.
- Borrar los permisos permitidos en Android M
- Los permisos de Android M cierran mi aplicación
- RequestPermission () no recrea completamente la pila de actividad
- Bloqueo antes de que se inicie la aplicación: SecurityException: denegación de permisos: INTERACT_ACROSS_USERS_FULL
- ¿Qué permiso debe requerir mi receptor SMS de manejo de entrada del sistema?
¿Hay alguna solución mejor? ¿O alguna sugerencia para poner revokeUriPermission
? Gracias por adelantado.
Enlace relacionado: Cómo conceder acceso temporal al proveedor de contenido personalizado mediante FLAG_GRANT_READ_URI_PERMISSION
- La aplicación se bloquea con SecurityException en Android M
- Si ya tengo ACCESS_FINE_LOCATION, ¿puedo omitir ACCESS_COARSE_LOCATION?
- Cómo corregir Advertencia de pelusa de SMS BroadcastReceiver sin protección
- Android Marshmallow, nivel de protección "peligroso" y componentes / aplicaciones del sistema
- OnCreate () se llama cuando se vuelve a abrir desde una tarea reciente después de cambiar la configuración del permiso
- Permiso de Android.INTERACT_ACROSS_USERS denegación
- ¿Comprobar el cuadro Nunca preguntar de nuevo al solicitar un permiso de ejecución deshabilitar los diálogos futuros?
- Firebase permisos adicionales. Se solicita aceptación al usuario
Hice algunas lecturas al respecto. En primer lugar, EXTRA_STREAM no utiliza FLAG_GRANT_READ_URI_PERMISSION
. Funciona a partir de JellyBean sólo porque debajo de la campana, llamando a startActivity()
copia EXTRA_STREAM
a ClipData
, que está configurado para Intent y utiliza FLAG_GRANT_READ_URI_PERMISSION
.
En cuanto a su pregunta, donde debe llamarse revokeUriPermission ().
Sugiero utilizar:
private static final int REQUEST_CODE = 1; startActivityForResult(intent, REQUEST_CODE);
en lugar de
startActivity(intent);
Y luego anular el siguiente método:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Check which request we're responding to if (requestCode == REQUEST_CODE) { // Call revokeUriPermission here } }
El método anterior será llamado cuando la actividad iniciada salga. Echa un vistazo a la documentación aquí
- Lista de aplicaciones predeterminadas que muestran errores en Android L
- Manera alternativa de implementar un tirador deslizante que ha quedado obsoleto desde la api 17