uri에서 경로를 가져 오려고합니다. 그것은 kitkat 아래 장치에서 작동합니다. 내가 봤 거든 내가 문서 ID를 얻고 갤러리 항목으로 쿼리해야한다는 것을 알았습니다. 그리고 그것은 작동합니다. 그러나 나는 비디오에 문제가있다. 비디오 섹션에서 비디오를 선택하면 작동합니다. 그러나 갤러리에서 그것을 선택하면 잘못된 응용 프로그램 예외 - 문서 유형이 아닌 응용 프로그램이 다운됩니다. 나는 그것이 왜 일어나고 있는지 안다. 갤러리 섹션에서 동영상의 문서 유형을 찾고 있기 때문입니다. 그러나 이것을 방지하는 방법. 그래서 두 갤러리 & 비디오 섹션에서 비디오를 선택할 수 있습니다.안드로이드에서 Uri의 경로 가져 오기 Kitkat이 잘못된 인수 예외를 throw합니다
여기 내 코드입니다 :
public static String getRealPathFromURI(Context context, Uri contentUri,String type) {
if(isKitkatBelow()) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
String docId= DocumentsContract.getDocumentId(contentUri);
String id= docId.split(":")[1];
if(type== TYPE_IMAGE){
String[] proj = { MediaStore.Images.Media.DATA };
String whereClause=MediaStore.Images.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
String[] proj = { MediaStore.Video.Media.DATA };
String whereClause=MediaStore.Video.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
}
내가 갤러리에 입력 MediaStore.Video.Media.DATA의 파일을 검색하는 것을 시도하고 있기 때문에이 일어나고있다. 그러나 kitkat 아래의 장치의 경우 MediaStore.Images.Media.DATA는 충돌을 일으키지 않고 갤러리에서 비디오 URI를 가져옵니다. 미리 감사드립니다 ..
고마워요. 이걸 사용하겠습니다. 작동한다면 알려 드리겠습니다. –
감사합니다. 하지만 하나의 쿼리가 있습니다. 다른 앱이 있고 사용자가 그 중 하나를 선택하면 오른쪽 충돌이 발생합니다. –
사용자가 선택하는 방법은 무엇입니까? –