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