2016-12-22 8 views
1

Android 저장 장치에 이미지 또는 비디오 파일을 첨부하고 싶습니다. 갤러리에서 비디오를 선택하면 콘텐츠 URI 경로을 반환합니다.비디오 파일의 콘텐츠 URI에서 파일 경로를 가져 오는 방법은 무엇입니까?

파일 경로을 콘텐츠 URI에서 가져 오는 방법은 무엇입니까?


나는 코드를 다음 시도하지만, 롤리팝에 null를 돌려 :

void pickVideo() { 
    Intent videoIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    videoIntent.setType("video/*"); 
    startActivityForResult(videoIntent, PICK_VIDEO_FILE); 
} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    try { 
     if (resultCode != Activity.RESULT_OK) 
      return; 

     switch (requestCode) { 
      case PICK_VIDEO_FILE: 
       Uri videoUri = data.getData(); 
       String path = getRealPathFromURI(getContext(), videoUri); 
       Log.d("Video uri path", "path" + path); 
       if (mChooseFileDialogListener != null) { 
        mChooseFileDialogListener.onVideoClick(videoUri, HealthRecordViewModel.FILE_TYPE_VIDEO); 
       } 
       break; 
     } 
    } 
} 


public String getRealPathFromURI(Context context, Uri contentUri) { 
    Cursor cursor = null; 
    try { 
     String[] proj = { MediaStore.Video.Media.DATA }; 
     cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 

답변

0

어떻게 확장자를 가진 파일 경로를 얻기 위해?

그렇지 않습니다. 사용자가 읽기 권한이있는 위치에 파일로 저장되는 콘텐츠를 선택해야 할 필요는 없습니다. 그리고 ContentProviderUri을 파일 경로로 변환하는 몇 가지 수단을 제공 할 필요는 없습니다.

ContentResolveropenInputStream()을 사용하면 Uri으로 식별되는 내용을 읽을 수 있습니다.

+0

나는 안드로이드 프로그래밍에 익숙하다. 이것과 관련된 몇 가지 예를들 수 있습니까? – Pulse

+0

@Pulse :'getContentResolver(). openInputStream (videoURI)'. – CommonsWare

+0

openInputStream (uri)는 InputStream 권한을 반환합니까? 이 파일을 첨부 파일로 어떻게 사용합니까? 내가 얻은 파일을 저장해야하고 내가 저장된 파일을 클릭하면 열 수있는 적절한 응용 프로그램을 사용해야합니다. – Pulse