올바른 주체를 사용하여 DocumentFile 또는 Uri에서 파일을 가져와야합니다. 장치의 주 메모리가 선택된 경우 content://com.android.externalstorage.documents/tree/primary:
인 파일이 필요합니다. 이미지의 파일 또는 절대 경로를 얻으려면 file : /// storage/emulated/0 또는 storage/emulated/0이 필요하지만 EXIF 데이터를 쓰는 File을 작성하기위한 올바른 Uri를 얻는 방법을 찾을 수 없습니다. 이미지.DocumentFile 클래스로 저장된 이미지에 EXIF 데이터 쓰기
내 시나리오는 다음과 같습니다
- 사용자()
content://com.android.externalstorage.documents
onActivityResult를 함께 열린 우리당을 반환 이미지를 저장할 경로를 선택합니다. 나중에 사용하기 위해이 경로를 SharedPreferences에treeUri.toString()
으로 저장합니다. - 사용자가 사진을 촬영하고 난 실패 할 경우 이미지가 제대로 이미지를 가리키는 파일을 받고,
DocumentFile.fromTreeUri(MainActivity.this, Uri.parse(uriString));
- 이 저장됩니다 콘텐츠와 열린 우리당은 : // 열린 우리당은
file:///storage/emulated/
해야 기존 image.Correct을 반환하지 않고 내가 할 수있는File filePath = new File(URI.create(saveDir.getUri().toString()));
이 어떻게 열린 내가 SAF UI에서 가져온 열린 우리당을 사용하여 파일 또는 파일을 consturcting에 필요한 얻을 수 있습니다 사용하여 파일이 열린 우리당을 변환?
EDIT :ExifInterface Support Library은 InputStream 또는 FileDescriptor를 사용할 수있는 Android 7.1 이상에 도입되었습니다.
Uri uri; // the URI you've received from the other app
InputStream in;
try {
in = getContentResolver().openInputStream(uri);
ExifInterface exifInterface = new ExifInterface(in);
// Now you can extract any Exif tag you want
// Assuming the image is a JPEG or supported raw format
} catch (IOException e) {
// Handle any errors
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ignored) {}
}
}
참고 : ExifInterface 그런 HttpURLConnection의에서 반환 된 것과 같은 원격에는 InputStream, 작동하지 않습니다. content/: // 또는 file : // URI에서만 사용하는 것이 좋습니다.
위의 스 니펫은 분명히 데이터를 읽는 InputStream을 열 때 데이터를 읽는 중입니다. JPEG 파일에 EXIF 데이터를 쓸 수 있어야합니다. API는 경우 FileDescriptor
를 사용하여 알려진 내용 열린 이전에 저장 한 이미지와 함께 Exif 데이터를 작성하기위한