늘모자란, 개발 :: [Android] parse Content URI

늘모자란, 개발

원래 intent를 넘겨줄때 file:/// 이런식으로 absolute path 를 넘겨주었으나 왠지 모르겠지만 Nougat 때부터 content:// 형태로 넘겨주기 시작했다. 때문에 기존 방법으로는 path를 얻을 수 없다.

이때 content:// 를 파싱(??) 하면 정보를 얻을 수 있다.

public String getFileName(Uri uri) {
 String result = null;
 if (uri.getScheme().equals("content")) {
   Cursor cursor = getContentResolver().query(uri, null, null, null, null);
   try {
     if (cursor != null && cursor.moveToFirst()) {
       result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
     }
   } finally {
     cursor.close();
   }
 }
 if (result == null) { 
   result = uri.getPath();
 }
 return result;
}


요점은 cursor 를 이용해 query 를 날려 의미하는 바를 알아내는 것이다.
제대로 안하면 커서 row에서 에러 나오고 쌩 고생을 할 수도있는데 요거면 잘된다.
혹시 전체 덤프가 필요하다면 datautils 의 dump를 이용하면 모두 로그로 찍어볼 수도 있다.
2017/03/13 15:44 2017/03/13 15:44