2014-07-20 2 views
2

이 프로그램은 정말 간단하다고 생각했지만, 전체 앱의 나머지 부분보다 많은 작업을하고 있습니다.카드의 폴더 열기

단지 버튼이 내 앱의 "다운로드 한 파일"폴더를 열길 원합니다. 그게 다야. 파일 선택기가 없으며 복잡하지 않습니다. 모든 버튼은 기본 앱이있는 폴더를 열거 나 기본값이없는 경우 앱 선택기를 열면됩니다.

내가 StackOverflow에서 본 다른 해결책을 시도했지만 아무것도 작동하지 않는 것 같습니다.

예 1 :

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath() + "/MyDownloadedFiles/"); 
intent.setDataAndType(uri, "text/plain"); 
startActivity(Intent.createChooser(intent, getString(R.string.action_downloaded))); 

내 안드로이드 4.4는, 이것이 킷캣 파일 선택기를 열고, 그리고 내가 원하는 폴더에조차 열리지 않습니다 ... 그것은 카드 루트에 디폴트 것으로 보인다. 그러나 폴더가 존재하고 의도에 주어진 경로가 실제로 올바른 것으로 확신합니다.

예 2 :

Intent intent = new Intent(Intent.ACTION_VIEW); 
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath() + "/MyDownloadedFiles/"); 
intent.setDataAndType(uri, "text/plain"); 
startActivity(Intent.createChooser(intent, getString(R.string.action_downloaded))); 

이 사람은 말을 팝업으로 일부 빈 활동을 엽니 다 : "파일 내용 가져올 때 오류가 발생했습니다 : MyDownloadedFiles을".

내 앱에 콘텐츠를 삽입하는 폴더의 바로 가기가 생기게하려면 어떻게해야합니까?

답변

4

와우 .. 마지막으로! 내가 시도한 많은 일들이 성공한 유일한 방법은 URI 문자열을 먼저 파일에 래핑 한 다음 Uri.fromFile을 수행하는 것이 었습니다 :

+0

그래서, 그 변환 (정말로 이상한 소리)과''*/* ''의 결합이 핵심입니까? –

+0

여기서 중요한 점은 File 객체가 "file : //"또는 무엇이든 앞에 붙일 수 있다는 것입니다. "*/*" 유형에 "Uri.parse()"및 "*/*"를 사용하면 작동하지 않으므로 위의 예 1과 동일하게 적용됩니다. – Nuno

+0

이상한 점은 솔루션입니다. 내게 당신이 "별표 (*)"를 쓰는 것을 계속하지 않는다면 ... 어쨌든, 킷캣이 그렇게하도록 요구한다면,'Environment.getExternalStorageDirectory()'가 이미 얻는다는 것을 명심한다면 코드를 조금 단순화 할 수있다. 당신은 File 객체 (파일에서 String, File to Uri : P로가는 신화를 만들지 않기 때문에 더 간단하게 유지하십시오.) 축하합니다! –

2

나는이 하나가 당신을 위해 일할 수있는 생각 :

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath() 
    + "/yourFolder/"); 
intent.setDataAndType(uri, "*/*"); 
startActivity(Intent.createChooser(intent, "Open /sdcard/yourFolder")); 
+0

안녕하세요. 나는 이것을 이미 시도해 보았고 나의 예 1과 매우 유사하다. 유일한 차이점은 유형이다. 나는 text/plain으로 가기 전에 */*를 시도했다. – Nuno

+0

이 코드가 작동합니다! :) – dira