Mam aplikację, w której został ustawiony widok obrazu i można go kliknąć, aby otworzyć w galerii.Udostępnianie obrazów przechowywanych w pamięci wewnętrznej
Domyślnie, używam poniższy kod, żeby dostać katalog pliku z zewnętrznej pamięci masowej do przechowywania moje JPEG:
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
Ale! Załóżmy, że pamięć zewnętrzna nie jest zamontowana lub po prostu nie istnieje (Galaxy Nexus), to nie działa. Więc napisałem instrukcję if wokół niej i otrzymałem wewnętrzny katalog pamięci podręcznej jako powrót.
String state = Environment.getExternalStorageState()
if(Environment.MEDIA_MOUNTED.equals(state)){
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
}else{
context.getCacheDir();
}
Obrazy pokazują się dobrze w ImageView, ale nie przychodzą, gdy mój zamiar się uruchamia.
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(imgFile), "image/jpeg");
startActivity(intent);
Galeria zostaje załadowana, ale pokazuje czarny ekran. Przypuszczalnie dlatego, że galeria nie ma dostępu do plików w katalogu pamięci podręcznej mojej aplikacji.
Jako alternatywa, próbowałem za pomocą dostawcę treści medialnych, który używa MediaStore.Images.Media.INTERNAL_CONTENT_URI
, ale prowadzi to do wystąpienia błędu podczas próby Inser obraz:
java.lang.UnsupportedOperationException: Writing to internal storage is not supported.
co mam zrobić?
Może mógłbym spróbować pakowania bitmapy wraz z zamiarem? Podobnie jak 'intent.putExtra (" BitmapImage ", bitmapa);'. Moje obrazy mają zwykle około 5 MB. – Maarten
Możesz przechowywać obrazy w prywatnej pamięci aplikacji i przyznać ogólny dostęp tylko do odczytu, jednak wiele aplikacji, w tym niektóre z wbudowanych google, nie będzie zawracać sobie głowy sprawdzaniem, czy mają do nich dostęp, gdy poda im ścieżkę, ale po prostu załóżmy, że nie mogą i nie, nawet jeśli aplikacja posiadająca rzeczywiście przyznała globalny dostęp do odczytu. –