2011-08-11 2 views
4

Android mediaPlayer 앱을 쓰고 있으므로 전체 휴대 전화의 모든 파일 (예 : sdcard 및 휴대 전화 메모리)을 스캔하려고합니다. 나는 sdcard에서 읽을 수 있지만 그 루트는 읽을 수 없습니다. 즉, 그냥 /sdcard/[folder]/ 경로에서 읽을 수 있으며 잘 작동하지만 /sdcard/로 이동하면 응용 프로그램이 중단됩니다. 어떻게하면 sdcard의 모든 파일과 전화 자체의 파일에 액세스 할 수 있습니까?Android 파일 시스템의 모든 파일 읽기

+1

당신은 안드로이드 컨텐트 리졸버를 알고 있습니까? 원하지 않으면 다음을 확인하십시오. http://developer.android.com/guide/topics/media/index.html#viacontentresolver 및 http://developer.android.com/guide/topics/providers/content-providers.html –

+0

도움이 되겠지만 mediaplayer 인스턴스에서 다음 노래를 어떻게 호출할까요? Uri를 사용하여 setDataSource()처럼 보입니다.하지만 거기에있는 모든 노래를 보는 방법을 모르겠습니다. –

+0

실제로 작동하지 않았습니다. 아직 전체 미디어 하위 시스템이 많이 있으므로,이를 다른 누군가에게 전달하여 답변을 드리겠습니다. 그러나 이것은 가능해야합니다. 모든 파일이 이미 스캔되었을 때 전체 sdcard/메모리를 검색하는 것이 불충분하고 배터리를 낭비하는 것처럼 들릴 수 있기 때문에 알려 드리고자합니다. 편집 : 검색을위한 하나의 아이디어 : 실제로 ContentResolver를 사용하여 미디어를 쿼리해야합니다. MediaPlayer는 실제로 플레이어 일 뿐이며 미디어 관리를 처리하지 않으며, 단지 하나의 미디어 만 재생합니다. 위의 링크는 조금 더 설명합니다. –

답변

9

/sdcard/경로를 절대로 사용하지 마십시오. 항상 작동하는 것은 아닙니다.

아래 코드를 사용하여 sdcard 디렉토리의 경로를 가져옵니다.

File root = Environment.getExternalStorageDirectory(); 
String rootPath= root.getPath(); 

rootPath 위치에서 SD 카드의 모든 파일 경로를 빌드 할 수 있습니다. 예를 들어 /DCIM/Camera/a.jpg에 이미지가있는 경우 절대 경로는 rootPath + "/DCIM/Camera/a.jpg"입니다.

는 그러나 SDCard에있는 모든 파일을 나열하려면, 당신은 SD 카드에 존재하는 모든 파일의 이름이 필터에 의해 설정된 기준을 통과 할 아래의 코드를

String listOfFileNames[] = root.list(YOUR_FILTER); 

listOfFileNames를 사용할 수 있습니다.

mp3 파일 만 나열하려면 list() 함수에 아래의 필터 클래스 이름을 전달하십시오.

FilenameFilter mp3Filter = new FilenameFilter() { 
File f; 
    public boolean accept(File dir, String name) { 

     if(name.endsWith(".mp3")){ 
     return true; 
     } 

     f = new File(dir.getAbsolutePath()+"/"+name); 

     return f.isDirectory(); 
    } 
}; 

Shash

+0

soo so much .... . 매우 감사 –