2012-11-04 2 views
0

사운드 풀을 사용하여 사운드를 재생하는 버튼이 있습니다. 내 응용 프로그램을 열고 SD 카드에서 수동으로 .mp3 파일을로드하고 버튼으로 재생하고 싶습니다. 내 자바 코드 : SD 카드가 외부 저장 장치는 일반적으로 (그러나 반드시)이기 때문에SD 카드에서 사운드를로드하고 재생하는 방법

package com.example.idea; 

    import android.media.SoundPool; 
    import android.os.Bundle; 
    import android.app.Activity; 
    import android.view.Menu; 
    import android.view.View; 

    public class MainActivity extends Activity { 
    SoundPool sp; 
    int mSoundId; 
    int mStreamId; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mSoundId = sp.load(this, R.raw.sound1, 1); 

} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

    public void button1(View view){ 
    if (mStreamId != 0) { 
    sp.stop(mStreamId); 
} 
    `mStreamId = sp.play(mSoundId, 1, 1, 1, 0, 1f);` 
} 
} 

답변

1

, 나는 다음과 같은 해결책을 제시합니다. 외부 저장소가 기기의 내부 카드 (예 : 태블릿)를 가리키는 경우 내 코드는 해당 폴더의 경로를 반환합니다.

따라서로드 방법의 다른 버전 인 SoundPool을 사용해야합니다 , 리소스 경로 대신 파일 경로 (예 : String)가 필요합니다. 메소드 설명서의 official link입니다. 파일의 경로를 얻으려면, 당신은이 방법을 사용할 수 있습니다 :이 경우

private String getFullFilePath(Context context, String filename) { 
    File directory = context.getExternalFilesDir(null); 
    File file = new File(directory, filename); 
    if (!file.canRead()) { 
     // error handling 
    } 
    return file.getAbsolutePath(); 
} 

를, 당신의 관련 코드는 다음과 같이 보일 것이다 :

String path = getFullFilePath(getApplicationContext(), "sound1.wav"); 
mSoundId = sp.load(path, 1); 

가 요약하면, 위의 코드를 검색합니다 응용 프로그램의 외부 저장소 디렉토리에있는 파일 비 내부 저장 파일에 액세스하는 표준 방법입니다 (예 : 외부 저장 장치가 SD 카드 또는 다른 것 인 경우 기기에 따라 다름).


UPDATE : 물론

, 외부 저장 장치를 사용하기 전에, 당신은 미디어 (쓰기, 쓰기 요구의 경우) 읽을 수 있는지 여부를 확인해야합니다. 자세한 내용은 official page에서 확인할 수 있습니다.

+0

나는 이것을 시도 할 것이다 :) Thanks – user1798049

+0

String path = getFullFilePath (getApplicationContext(), "sound1.mp3"); 내 응용 프로그램을 무력화합니다. – user1798049

+0

정확한 예외 메시지 (logcat)는 무엇입니까? 파일이 해당 폴더에 있습니까? 아니면 다른 곳에 있습니까? –

관련 문제