2011-03-30 6 views
5

사운드 보드 응용 프로그램을 만들고 있는데 어떤 메뉴 항목을 클릭했는지에 따라 벨소리 또는 알림으로 사운드를 재생하려고합니다. 벨소리는 현재 벨소리 메뉴의 기본 벨소리로 표시되지만 전화가 오면 재생되지 않습니다. 무엇이 잘못 되었습니까? 내 코드는 다음과 같습니다.안드로이드에서 내 벨소리를 재생하려면 어떻게해야합니까?

public boolean saveas(int ressound,String file,String typesound){ 
    byte[] buffer=null; 
    InputStream fIn = getBaseContext().getResources().openRawResource(ressound); 
    int size=0; 

    try { 
     size = fIn.available(); 
     buffer = new byte[size]; 
     fIn.read(buffer); 
     fIn.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } 

    String path="/sdcard/media/audio/ringtones/"; 
    String filename=file+".ogg"; 

    boolean exists = (new File(path)).exists(); 
    if (!exists){new File(path).mkdirs();} 

    FileOutputStream save; 
    try { 
     save = new FileOutputStream(path+filename); 
     save.write(buffer); 
     save.flush(); 
     save.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    }  

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); 

    File k = new File(path, filename); 

    ContentValues values = new ContentValues(); 
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
    values.put(MediaStore.MediaColumns.TITLE, file); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
    values.put(MediaStore.Audio.Media.ARTIST, "douchebag"); 
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
    values.put(MediaStore.Audio.Media.IS_ALARM, true); 
    values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

    //Insert it into the database 
    this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 

    //set ringtone 
    Uri ringtoneUri = Uri.parse(path+filename); 
    if(typesound=="ringtone") 
     RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, ringtoneUri); 

    return true; 
} 
+0

오류가 있습니까? 당신이보고있는 행동은 무엇입니까? 또한 앱이 예상대로 작동하지 않을 경우 예외를 catch하면 로깅을 시도하십시오. – CrackerJack9

답변

1

이 질문에 here에 따르면, 당신은 "외부"URI로 벨소리를 설정해야합니다. 내가 말할 수있는 한, 기본적으로 모든 부분을 가지고 있으며, 단지 작은 조정 만하면됩니다.

//Insert it into the database 
Uri ringtoneUri = this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 
//set ringtone  
if(typesound=="ringtone") 
    RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, ringtoneUri); 
0
FullBatteryAlarm.prefs = PreferenceManager 
      .getDefaultSharedPreferences(this); 
    String strRingtonePrefs = FullBatteryAlarm.prefs.getString(
      FullBatteryAlarm.res.getString(R.string.ringtone), "content://settings/system/alarm_alert"); 
    //Log.i("strringtone", strRingtonePrefs); 
    Uri notification = Uri.parse(strRingtonePrefs); 

    AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    //mgr.getStreamMaxVolume(AudioManager.STREAM_ALARM); 
    mgr.setStreamVolume(
      AudioManager.STREAM_RING, 
      mgr.getStreamMaxVolume(AudioManager.STREAM_RING), 
      AudioManager.FLAG_PLAY_SOUND); 
    //Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show(); 

을 또는 당신은 당신의 기본 알림 소리를 얻을 수있는이 조각은 당신을 위해 작동하는 경우

는보십시오.

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
    r.play(); 
0

안녕하세요, 당신이 안드로이드 매니페스트의 권한을 설정할 필요가 있다고 생각합니다. 다음은 내가 사용한 허가입니다.

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> 

또한 나는 OGG 파일에 대한 확실하지 않다. 나는 mp3 파일을 사용했고 그것은 나를 위해 일했다.

관련 문제