안드로이드 개발 질문/답변
(글 수 45,052)
raw에 저장된 sample_music1.mp3화일을 스마트폰file://sdcard/media/audio/ringtones/sample_music1.mp3 으로
저장을 하려는데 해당 스마트폰에 같은이름으로 저장을 하려고하는데
자꾸 저장이 안되네요
해당 폴더에 대한 접근도 안되구요 어떻게 해야할지 이틀연속 고민인데 해결이 안되네요
부탁드리겠습니다.
byte[] buffer=null;
InputStream fIn =getResources().openRawResource(R.raw.sample_music1);
// InputStream fIn =openRawResource(R.raw.sample_music1);
int size=0;
try {
size = fIn.available();
buffer = new byte[size];
fIn.read(buffer);
fIn.close();
} catch (IOException e) {
e.printStackTrace();
}
String path="file://sdcard/media/audio/ringtones/";
String filename="examplefile"+".mp3";
boolean exists = (new File(path)).exists();
if (!exists){new File(path).mkdirs();}
FileOutputStream save;
try {
save = openFileOutput("file://sdcard/media/audio/ringtones/sample_music1.mp3", 0);
save.write(buffer); // 이부분이 저장이 안됩니다
save.flush();
Log.d("aa","aa");
save.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
return true;
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename)));
File file = new File(path, filename);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
//
try {
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "역사");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());
getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + file.getAbsolutePath() + "\"", null);
Uri newUri = getApplicationContext().getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "벨소리 설정에 실패했습니다.", Toast.LENGTH_SHORT).show();
return false ;
}
Toast.makeText(getApplicationContext(), "벨소리 설정이 완료되었습니다.", Toast.LENGTH_SHORT).show();
return true;
}
}




저도 작년에 만들었던 어플이
raw 폴더에 있던 mp3파일을 sdcard 로 복사한후 벨소리로 저장하는 방식이었습니다.
/**
* 벨소리를 SD Card에 저장한다.
*/
public boolean saveRingtone(){
try{
byte[] buffer = null;
int m_temp = 0;
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "bell_"+s_title+"_01.mp4";
m_temp = R.raw.bell01;
InputStream is = getBaseContext().getResources().openRawResource(m_temp);
m_bellFileSize = is.available();
buffer = new byte[m_bellFileSize];
is.read(buffer);
is.close();
File dir = new File(path+"/ringtones");
dir.mkdir();
File file = new File(path+"/ringtones/"+fileName);
FileOutputStream fos = new FileOutputStream(file, false);
fos.write(buffer);
fos.close();
buffer = null;
} catch(Exception e){
Log.e("MusicPlayer", "IO Exception by saveRingtone() " + e);
return false;
}
return true;
}