Questo è il codice di base:
@Override public void onClick(View v) { Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); startActivityForResult(intent,0); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data){ Uri ringtoneUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); Ringtone ringtone=RingtoneManager.getRingtone(getApplicationContext(), ringtoneUri); ringtone.play(); }Per la scelta della suoneria bisogna scrivere ACTION_RINGTONE_PICKER.
Per "cacciare fuori" la suoneria dai data bisogna scrivere EXTRA_RINGTONE_PICKED_URI, che da un risultato in Uri, dal quale poi si può ricavare la suoneria e suonarla o istituirla come suoneria di default.
Scomponiamo le parti:
Parto dall'Intent. Se io scrivo:
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); startActivity(intent);mi appare la lista delle Suonerie telefoniche.
Ora vediamo di far apparire la lista delle Suonerie della sveglia, ossia se è sensata la mia ipotesi che ponendo un putExtra con dei particolari parametri si può ottenere questo risultato...
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM); startActivity(intent);Vediamo...
Sì! E' sensata!
Facciamo la stessa cosa con le notifiche:
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); startActivity(intent);Perfetto! Corrisponde anche qui! Qui vengono elencati i toni per le notifiche.
Proviamo a inserire come parametro value di putExtra TYPE_ALL...
@Override public void onClick(View v) { Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL); startActivity(intent); }Perfetto! Così mi appaiono tutte! Identifico il tono CHIME che è una suoneria telefonica, MORNING FLOWER ALARM che è una suoneria della sveglia e WHISTLE che è una suoneria di notifica.
E per quanto riguarda la scelta delle suonerie, abbiamo chiarito!
Ora vediamo la seconda parte, nella quale sarebbe logico ci fosse la possibilità di assegnare un certo tono a diventare suoneria telefonica o di sveglia o di notifica... vediamo... Intanto correggo startActivity con startActivityForResult (quella di prima mi serviva solo per mostrare le liste, senza alcuna conseguenza della scelta)
Fin qui nessun problema:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data){ Uri ringtoneUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); }Anzi, faccio un test e provo a farmi scrivere in LogCat l'Uri della suoneria per vedere se le estrae tutte.
button=(Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL); startActivityForResult(intent,0); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data){ Uri ringtoneUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); Log.d("SUONERIA", ringtoneUri.toString()); }Ecco:
07-30 13:24:06.831: D/SUONERIA(19604): content://media/internal/audio/media/41 07-30 13:24:38.552: D/SUONERIA(19604): content://media/internal/audio/media/5 07-30 13:24:53.877: D/SUONERIA(19604): content://media/internal/audio/media/30...che corrispondono alle suonerie:
- Chime (suoneria telefonica);
- Morning Flower Alarm (suoneria sveglia);
- Whistle (suoneria notifica).
Andiamo avanti...
Ecco, probabilmente è sull'altra riga che decidiamo in quale serie assegnare una suoneria, mediante il TYPE che diamo come secondo parametro a RingtoneManager.setActualDefaultRingtoneUri.
@Override public void onActivityResult(int requestCode, int resultCode, Intent data){ Uri ringtoneUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, ringtoneUri); }Posso fare la prova.
Assegno come default alla suoneria telefonica Whistle, sarà possibile?
Errore! Ci vuole il permesso WRITE_SETTINGS.
Vado al Manifest...
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>E assegno anche Chime alle suonerie di notifica...
@Override public void onActivityResult(int requestCode, int resultCode, Intent data){ Uri ringtoneUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_NOTIFICATION, ringtoneUri); }Ora vado a vedere fra le impostazioni del cellulare:
Mi sembra perfetto.
Aggiungo Chime alle suonerie della sveglia:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data){ Uri ringtoneUri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_ALARM, ringtoneUri); }E qui mi trovo in crisi perché esistono tante sveglie ognuna con il suo tono che non è comunque Chime... bene, altra cosa che forse si capirà in seguito, e che comunque adesso poco mi interessa.
Nessun commento:
Posta un commento