티스토리 뷰
이 기능을 위해서 내부적으로 음원 파일을 가지고 설정을 하려고 했는데 용량 관계로 웹에서 파일을 불러와 벨소리 리스트에 추가하는 방법을 알아보자.
다운로드 버튼을 눌렀을 경우 | 다운 버튼을 누른후 동작 |
위의 화면에서 재생 버튼을 누르게 되면 아래와 같이 웹에 생성한 soundPool로 해당 주소의 파일을 불러와 벨소리 리스트위치에 다운이 되며 미디어 파일 검색을 해 줌으로써 알림음 리스트에 해당 음원이 추가가 된다.
여기서 주의할 점은 DOWNLOAD_PATH 경로와 다운이 완료 되었을 경우 리스트 갱신을 위해 "미디어 파일 검색"을 해 주는 아래 코드이다.
private static String DOWNLOAD_PATH = "/mnt/sdcard/media/audio/notifications/";
[벨소리 리스트에 추가시]
private static String DOWNLOAD_PATH = "/mnt/sdcard/media/audio/ringtones/";
[미디어 파일 검색 코드]
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
아래 전체소스를 참고해서 웹 음원파일을 재생하고 원하는 위치에 다운도 해 보자.
[MenuPlay.java 파일 전체내용 보기]
public class MenuPlay extends Activity { /** Called when the activity is first created. */ private static SoundPool soundPool; private static int[] sound; private static String TIP_POPUP_MSG = "웹에서 파일을 불러오는 중입니다.\n잠시만 기다려 주세요!"; //private static String DOWN_POPUP_MSG = "다운을 시작합니다. 잠시만 기다려 주세요!"; private static String DOWN_COMPLETED_POPUP_MSG = "해당 파일을 \"Media/Audio/Notifications\"에\n"; private static String DOWN_FAIL_POPUP_MSG = "해당 파일을 다운로드 실패하였습니다.\n개발자에게 문의 바랍니다."; private static String DOWNLOAD_PATH = "/mnt/sdcard/media/audio/notifications/"; private static String NOTI1_URL = "음원파일웹주소/음원파일명"; private static String NOTI1_FILENAME = "저장될음원파일명"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Title bar 제거 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.play); soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0 ); sound = new int[1]; sound[0] = soundPool.load(NOTI1_URL, 1); /* Play 버튼 동작시 수행됨 */ Button Button_Play_Noti1 = (Button) findViewById(R.id.buttonPlay_noti1); Button_Play_Noti1.setOnClickListener( new OnClickListener(){ public void onClick(View v){ if(playSound(0) == 0) { Toast.makeText(MenuPlay.this, TIP_POPUP_MSG, Toast.LENGTH_SHORT).show(); } } } ); /* Download 버튼 동작시 수행됨 */ Button Button_Down_Noti1 = (Button) findViewById(R.id.buttonDown_noti1); Button_Down_Noti1.setOnClickListener( new OnClickListener(){ public void onClick(View v){ try { InputStream inputStream = new URL(NOTI1_URL).openStream(); File path = new File(DOWNLOAD_PATH); if(! path.isDirectory()) { path.mkdirs(); } File file = new File(DOWNLOAD_PATH+NOTI1_FILENAME); OutputStream out = new FileOutputStream(file); saveRemoteFile(inputStream, out); out.close(); Toast.makeText(MenuPlay.this, DOWN_COMPLETED_POPUP_MSG+NOTI1_FILENAME+" 이름으로 다운로드 하였습니다.", Toast.LENGTH_SHORT).show(); sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } catch(Exception e){ Toast.makeText(MenuPlay.this, DOWN_FAIL_POPUP_MSG, Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } } ); public static int playSound(int i){ return soundPool.play( sound[i], 1, 1, 0, 0, 1); } public void saveRemoteFile(InputStream is, OutputStream os) throws IOException { int c = 0; while((c = is.read()) != -1) os.write(c); os.flush(); } }
'Developer > Android' 카테고리의 다른 글
Bluetooth Chat 소스 다운로드 (0) | 2011.12.19 |
---|---|
05. 아현성현 성장기 Market에서 확인하기 (0) | 2011.11.28 |
03. 이미지 버튼 만들기 #2 (안드로이드에 생성한 이미지 적용) (0) | 2011.11.28 |
03. 이미지 버튼 만들기 #1 (포토샵으로 이미지 만들기) (2) | 2011.11.17 |
02. Back 버튼 두번눌러 종료하기 (2) | 2011.11.17 |
댓글