Android의 인 텐트를 통해 모든 종류의 파일 선택


95

모든 종류의 파일을 반환 할 수있는 앱의 인 텐트 선택기를 시작하고 싶습니다.

현재 (파일 첨부를 위해 Android 이메일 소스 코드에서 복사 한) 사용합니다.

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent i = Intent.createChooser(intent, "File");
startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);

하지만 내 Galaxy S2에는 "갤러리"와 "음악 플레이어"만 표시됩니다. 이 장치에 파일 탐색기가 있으며 목록에 표시하고 싶습니다. 또한 카메라 앱이 목록에 표시되어 사용자가 사진을 촬영하여 내 앱을 통해 보낼 수 있도록하고 싶습니다. Astro 파일 관리자를 설치하면 그 의도에도 응답합니다. 내 고객은 Galaxy SII 소유자 일 뿐이며 이미 기본이지만 충분한 파일 관리자가 있다는 점을 감안할 때 Astro 파일 관리자를 설치하도록 강요하고 싶지 않습니다.

내가 이것을 어떻게 얻을 수 있는지에 대한 아이디어가 있습니까? 파일을 선택하기 위해 이러한 메뉴에 기본 파일 관리자가 나타나는 것을 이미 보았지만 어떤 앱에 있는지 기억할 수 없습니다.


사진을 촬영 한 다음 파일을 선택하려면 매우 다른 코드가 필요합니다. 실제로 대부분의 파일 탐색기가 파일을 반환 할 수 있다고 생각하지는 않지만 잘못되었을 수 있습니다.
dtech

주로 액세스해야하는 파일의 종류를 지정할 수 있습니까?
subrussn90

1
@dtech : 파일 탐색기가 파일을 반환 할 것으로 기대하지 않습니다. 경로 만 필요합니다.
ErGo_404

@ subrussn90 : 사용자가 모든 종류의 파일을 선택하도록해야합니다. pdfs, .doc, .zip, 모든 종류의 파일이 될 수 있습니다.
ErGo_404

SD 카드에 지정된 파일의 Uri를 얻는 것으로 충분합니까 ???
subrussn90

답변:


88

카메라 용이 아니라 다른 파일 용 ..

내 장치에 ES File Explorer설치했고 이것은 내 경우에 간단히 작동합니다 ..

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);

5
외부 파일 탐색기 (예 : ES 파일 탐색기 또는 Astro 파일 관리자)에서는 작동하지만 Samsung 파일 탐색기에서는 작동하지 않습니다. 해당 작업에 응답하는 올바른 의도 필터를 구현하지 않은 것이 이상합니다.
ErGo_404

@Lukap-오픈 소스 Android 파일 관리자를 사용하고 애플리케이션과 통합하면 타사 애플리케이션이 필요하지 않습니다.
user370305

2
선택한 파일을 어떻게 얻을 수 있습니까? 나는 그것이 경로라고 생각하지만 어떻게?
Francisco Corrales Morales

1
@FranciscoCorralesMorales-in- onActivityResult()당신은 Uri파일을 얻을 수 있습니다 .
user370305 2014

1
PICKFILE_RESULT_CODE이어야합니다 PICKFILE_REQUEST_CODE.
Aron Lorincz 2015 년

50

삼성 파일 탐색기는 커스텀 액션 ( com.sec.android.app.myfiles.PICK_DATA )뿐만 아니라 카테고리 부분 (Intent. CATEGORY_DEFAULT )과 mime-type도 extra로 전달해야합니다.

Intent intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);

이 작업을 사용하여 여러 파일을 열 수도 있습니다. com.sec.android.app.myfiles.PICK_DATA_MULTIPLE 어쨌든 여기 삼성 및 기타 장치에서 작동하는 내 솔루션이 있습니다.

public void openFile(String mimeType) {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(mimeType);
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        // special intent for Samsung file manager
        Intent sIntent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
         // if you want any file type, you can skip next line 
        sIntent.putExtra("CONTENT_TYPE", mimeType); 
        sIntent.addCategory(Intent.CATEGORY_DEFAULT);

        Intent chooserIntent;
        if (getPackageManager().resolveActivity(sIntent, 0) != null){
            // it is device with Samsung file manager
            chooserIntent = Intent.createChooser(sIntent, "Open file");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent});
        } else {
            chooserIntent = Intent.createChooser(intent, "Open file");
        }

        try {
            startActivityForResult(chooserIntent, CHOOSE_FILE_REQUESTCODE);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(getApplicationContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();
        }
    }

이 솔루션은 저에게 잘 작동하며 다른 사람에게 유용 할 수 있습니다.


sIntent가 시작될 때 어떤 유형의 파일도 허용하지 않는다는 사실을 제외하면 거의 작동합니다. 폴더를 탐색 할 수 있지만 그게 전부입니다.
Radu 2011

문제는 인 텐트에 mimeType : "file / *"이 있어야하는 반면 Samsung sIntent에는 "* / *"가 필요합니다-* / *
Radu

1
다른 11k Android 기기는 어떻습니까?
Oliver Dixon

1
이 인 텐트에 대한 URI를 어떻게 설정해 주시겠습니까?
PriyankaChauhan

1
Samsung Intent ( "com.sec.android.app.myfiles.PICK_DATA")의 경우 String 추가 "FOLDERPATH"또는 "START_FOLDER"를 입력 할 수 있습니다
Chupik

41

갤럭시 노트에서 나를 위해이 작업은 쇼 연락처, 장치에 설치된 파일 관리자, 갤러리, 음악 플레이어

private void openFile(Int  CODE) {
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(intent, CODE);
}

여기 onActivityResult활동의 경로를 얻으십시오 .

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     String Fpath = data.getDataString();
    // do somthing...
    super.onActivityResult(requestCode, resultCode, data);

}

6
uri 가져 오기를 util.File로 변환하는 방법은 무엇입니까?
Anand Savjani

java.io.File에 대해 확실하지 않지만 다음으로 열 수 있습니다. developer.android.com/reference/android/content/… 간단한 이름을 얻는 방법은 다음과 같습니다. stackoverflow.com/a/23270545/755313
demaksee

3
폴더를 선택하는 방법?
hornet2319 2015 년

6

이것은 나에게 최상의 결과를 제공합니다.

    Intent intent;
    if (android.os.Build.MANUFACTURER.equalsIgnoreCase("samsung")) {
        intent = new Intent("com.sec.android.app.myfiles.PICK_DATA");
        intent.putExtra("CONTENT_TYPE", "*/*");
        intent.addCategory(Intent.CATEGORY_DEFAULT);
    } else {

        String[] mimeTypes =
                {"application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx
                        "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", // .ppt & .pptx
                        "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xls & .xlsx
                        "text/plain",
                        "application/pdf",
                        "application/zip", "application/vnd.android.package-archive"};

        intent = new Intent(Intent.ACTION_GET_CONTENT); // or ACTION_OPEN_DOCUMENT
        intent.setType("*/*");
        intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
    }

onActivityResultCode @Islam Khaled
Kishan Donga

1
세 번째 옵션은 org.openintents.action.PICK_FILE을 참조하십시오. openintents.org/action/org-openintents-action-pick-file 또한 코드는 삼성 전화의 모든 사용자가 삼성 파일 관리자를 사용하고 (여전히) 가지고 있다고 가정합니다. 삼성과 함께 intent.resolveActivity를 폴백으로 사용하는 것이 더 강력 할 것입니다.
Marcus Wolschon

1

삼성 파일 탐색기가 사용자 지정 작업을 사용하는 것으로 밝혀졌습니다. 이것이 삼성 앱에서 파일을 찾을 때 삼성 파일 탐색기를 볼 수 있지만 내 파일이 아닌 이유입니다.

작업은 "com.sec.android.app.myfiles.PICK_DATA"입니다.

두 인 텐트를 필터링하는 활동을 표시하는 사용자 지정 활동 선택기를 만들었습니다.


안녕하세요, 좀 더 설명해 주 시겠어요? 삼성 갤럭시 폰의 경우 Intent selectFile = new Intent ( "com.sec.android.app.myfiles.PICK_DATA"); 하지만 오류가 발생합니다
steliosf

지금은 잘 모르겠지만 나중에 확인할 수 있습니다. Activity Not Found 예외라고 생각합니다. 작동하는 솔루션이 있습니까? 나는 거의 모든 것을 시도했지만 그것을 고칠 수
없었

이 의도는 Galaxy SII에서 저에게 효과적이었습니다. GT-B5510 (Galaxy Y Pro)에서 시도했지만 작동하지 않았습니다. 모든 삼성 기기를 타겟팅하려는 경우 신뢰할 수 없다고 생각합니다. 결국 오픈 소스 파일 관리자를 내 응용 프로그램에 통합했지만 이러한 기본적인 요구를 충족시키는 무거운 솔루션입니다.
ErGo_404

이 인 텐트에 대한 URI를 어떻게 설정해 주시겠습니까?
PriyankaChauhan

0

이것을 알고 싶다면 파일 선택기를 제공하는 작고 사용하기 쉬운 aFileDialog 라는 오픈 소스 라이브러리 가 있습니다.

Android 용 다른 파일 선택기 라이브러리와의 차이점은 aFileDialog가 파일 선택기를 대화 상자 및 활동으로 여는 옵션을 제공한다는 것입니다.

또한 폴더를 선택하고, 파일을 만들고, 정규식을 사용하여 파일을 필터링하고, 확인 대화 상자를 표시 할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.