2011-03-30 7 views
5

Estoy haciendo una aplicación de caja de resonancia y estoy tratando de tener una reproducción de sonido como un tono de llamada o notificación, dependiendo de qué elemento del menú se hace clic. El tono de llamada actualmente aparece como el tono de llamada predeterminado en el menú de tono de llamada, pero no se reproduce cuando entra una llamada telefónica. ¿Qué estoy haciendo mal? Mi código está en la lista a continuación.¿Cómo puedo obtener mi tono de llamada para jugar en Android?

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

¿Aparece un error? ¿Cuál es el comportamiento que estás viendo? Además, intente iniciar sesión cuando atrape una excepción si hace que su aplicación no funcione como se esperaba. – CrackerJack9

Respuesta

1

De acuerdo a esta pregunta here, es necesario establecer el tono con el URI "externa". Por lo que puedo decir, básicamente tienes todas las piezas y solo necesitas hacer un pequeño ajuste.

probar si este fragmento funciona para usted:

//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(); 

o puede obtener su sonido de notificación predeterminado.

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

Hey, creo que es necesario para establecer el permiso en el manifiesto androide. A continuación se muestra el permiso que utilicé.

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

Además no estoy seguro acerca de los archivos OGG. Usé archivos mp3 y funcionó para mí.

Cuestiones relacionadas