Ho un'applicazione in cui è impostato un ImageView e può essere cliccato per essere aperto nella galleria.Condivisione di immagini archiviate nella memoria interna
Per impostazione predefinita, io uso il seguente codice per ottenere una directory di file dalla memoria esterna per memorizzare i miei file JPEG:
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
Ma! Supponiamo che la memoria esterna non sia montata o semplicemente non esista (Galaxy Nexus), questo non funziona. Così ho scritto un'istruzione if attorno ad esso e ho ottenuto la directory cache interna come una caduta.
String state = Environment.getExternalStorageState()
if(Environment.MEDIA_MOUNTED.equals(state)){
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
}else{
context.getCacheDir();
}
Le immagini vengono visualizzate correttamente nell'ImageView, ma non vengono visualizzate quando il mio intento viene avviato.
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(imgFile), "image/jpeg");
startActivity(intent);
La galleria viene caricata, ma mostra una schermata nera. Presumibilmente perché la galleria non ha accesso ai file nella directory cache della mia app.
In alternativa, ho provato ad utilizzare il provider di contenuto multimediale che utilizza MediaStore.Images.Media.INTERNAL_CONTENT_URI
, ma questo porta ad un errore quando si cerca di inser l'immagine:
java.lang.UnsupportedOperationException: Writing to internal storage is not supported.
Cosa devo fare?
Forse ho potuto provare il confezionamento del bitmap con l'intento? Come 'intent.putExtra (" BitmapImage ", bitmap);'. Le mie immagini sono in genere di circa 5 MB. – Maarten
Puoi archiviare le immagini nella memoria privata dell'applicazione e concedere l'accesso generale a LEGGERE SOLO a queste, tuttavia molte applicazioni tra cui alcuni dei built-in di google non si preoccuperanno di controllare se possono accedervi quando gli viene consegnato un percorso, ma semplicemente Supponiamo che non possano e non riescano, anche quando l'applicazione proprietaria ha effettivamente concesso l'accesso globale in lettura. –