안드로이드에서, 앱으로 파일을 공유하는 경우, 위치를 받아오는 포맷이 크게 2가지가 있다.
하나는 content:/// 스키마의 포맷이고, 다른 하나는 file:/// 스키마의 포맷으로 Uri 객체나 리스트 Uri를 받을 수 있다. 그리고, 파일을 공유받기 위해서는 ACTION_SEND와 ACTION_SEND_MULTIPLE를 AndroidManifest.xml 파일에서 해당 Action을 처리하는 Activity안에 기술해 준다.
위의 과정을 통해서, 서비스하는 앱이 다른 앱에서 공유하는 파일의 위치를 받아서 업로드를 하거나, 파일을 전송할 수 있다. 위의 content:/// 스키마를 사용하는 기본 갤러리 앱등에서 받은 content:/// Uri를 file:/// 스키마의 Uri로 변경시켜 주는 코드이다.
/** * Uri 스키마를 content:/// 에서 file:/// 로 변경한다. * * @param ctx * @param uri * @return * @throws Exception */ public static Uri convertContentToFileUri(Context ctx, Uri uri) throws Exception { Cursor cursor = null; try { cursor = ctx.getContentResolver().query(uri, null, null, null, null); cursor.moveToNext(); return Uri.fromFile(new File(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)))); } finally { if(cursor != null) cursor.close(); } }
자, 이제 변경된 Uri에서 파일의 위치를 가져와서 I/O 작업을 할 수 있겠다..