Chciałbym zrobić zdjęcie z kamery i zapisać je w prywatnym katalogu pamięci podręcznej aplikacji. Zdaję sobie sprawę, że muszę zezwolić aplikacji na kamerę na pisanie do mojego prywatnego katalogu, dlatego dodałem flagę FLAG_GRANT_WRITE_URI_PERMISSION
.Przechowuj obraz z kamery do prywatnego katalogu pamięci podręcznej aplikacji.
Co się dzieje, że aplikacja aparatu otwiera się, mogę zrobić zdjęcie, ale gdy klikam przycisk OK, nic się nie dzieje. Aplikacja aparatu pozostaje otwarta. Brak danych wyjściowych dziennika. Myślę, że to z powodu problemu z uprawnieniami.
private void getCameraImage() {
try {
mTmpFile = File.createTempFile("tmp", ".jpg", getCacheDir());
Uri imgUri = Uri.fromFile(mTmpFile);
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// i.setData(imgUri); // if uncommented, i get an ActivityNotFound Exception
startActivityForResult(i, REQUEST_CAMERA);
} catch (IOException e) {
Log.e(TAG, "getCameraImage()", e);
Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show();
}
}
Wszelkie spostrzeżenia, w jaki sposób mogę to poprawić?
Edit:
Kiedy zmienić katalog na karcie SD publicznym, to działa dobrze.
mTmpFile = File.createTempFile("tmp", ".jpg", Environment.getExternalStorageDirectory());
Dzięki Simon
Jeśli był to problem z uprawnieniami, w LogCat pojawiłby się błąd. – PearsonArtPhoto
Nie jestem tego pewien. Nawet gdy usuwam flagę FLAG_GRANT_WRITE_URI_PERMISSION, nie otrzymuję żadnych wyników dziennika. Może aplikacja kamery sprawdza uprawnienia i po prostu przerywa działanie, jeśli nie może zapisać pliku. – SimonSays