마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

파일 인텐트에서 최근파일을 선택하면 앱이 종료됩니다

0 추천

파일 인텐트의 첫화면에서 휴대전화의 최근파일을 선택하면 앱이 튕깁니다.

 

private Intent file = new Intent(Intent.ACTION_GET_CONTENT);
private static final int FILE_SELECT_CODE = 0;

file.setType("*/*");
file.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case REQ_CD_FILE:
            if (resultCode == Activity.RESULT_OK) {
                ArrayList<String> filePath = new ArrayList<>();
                if (data != null) {
                    if (data.getClipData() != null) {
                        for (int index = 0; index < data.getClipData().getItemCount(); index++) {
                            ClipData.Item item = data.getClipData().getItemAt(index);
                            filePath.add(FileUtil.convertUriToFilePath(getApplicationContext(), item.getUri()));
                        }
                    }
                    else {
                        filePath.add(FileUtil.convertUriToFilePath(getApplicationContext(), data.getData()));
                    }
                }
            }
            else {

            }
            break;
            default:
            break;
        }
}

 

소프트파크 (120 포인트) 님이 2021년 2월 22일 질문
https://drive.google.com/file/d/1t-gNKjdgolt-as1Se2ggL1hZlIuyWCzH/view?usp=sharing

파일인텐트 첫화면은 이 화면 말하는 겁니다
어느 라인에서 에러가 나오는지, 에러메세지가 뭔지 확인하시려면 디버깅을 해보세요. 에러가 난다면 당연히 먼저 해보셔야할 아주 기본적인 과정입니다.

1개의 답변

0 추천
아래 함수를 사용해 보세요. 제가 이것저것 검색해서 조합한 함수입니다.

    public static String getFullPathFromUri(Context ctx, Uri fileUri) {
        String fullPath = null;
        final String column = "_data";
        Cursor cursor = ctx.getContentResolver().query(fileUri, null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
            String document_id = cursor.getString(0);
            if (document_id == null) {
                for (int i=0; i < cursor.getColumnCount(); i++) {
                    if (column.equalsIgnoreCase(cursor.getColumnName(i))) {
                        fullPath = cursor.getString(i);
                        break;
                    }
                }
            } else {
                document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
                cursor.close();

                final String[] projection = {column};
                try {
                    cursor = ctx.getContentResolver().query(
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            projection, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
                    if (cursor != null) {
                        cursor.moveToFirst();
                        fullPath = cursor.getString(cursor.getColumnIndexOrThrow(column));
                    }
                } finally {
                    if (cursor != null) cursor.close();
                }
            }
        }
        return fullPath;

    }
Will Kim (43,170 포인트) 님이 2021년 2월 23일 답변
...