Quando viene scelta una suoneria, viene scelto un URI che viene attribuito alla variabile uri, la quale viene quindi memorizzata in SP.
Se viene fatta la scelta "Nessuna suoneria", non c'è nessun URI, per cui la variabile uri è nulla, e il tentativo di salvarla in SP genera un errore.
Ho ovviato così, facendo in modo che se URI è assente e uri è quindi nulla venga salvata in SP una stringa vuota.
@Override public void onActivityResult(int requestCode, int resultCode, Intent data){ if(resultCode==RESULT_OK) { Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); String s; if(uri==null){ s=""; } else{ s=uri.toString(); } System.out.println("Stringa memorizzata in SP: "+s); SharedPreferences.Editor editor = SP.edit(); editor.putString("suoneria", s); editor.commit(); } }Ora devo andare a vedere l'altro versante, ossia il richiamo della suoneria da SP.
Se trovo una stringa non vuota, prendo questa come nome della suoneria, creando il ringtoneUri.
Se trovo una stringa vuota, invece, non devo mettere in azione la suoneria di default, bensì impostare ringtoneUri a null.
String strSuoneria=SP.getString("suoneria",""); if(TextUtils.isEmpty(strSuoneria)){ ringtoneUri=null; } else{ ringtoneUri=Uri.parse(strSuoneria); } System.out.println("Stringa pescata da SharedPreferences: "+strSuoneria); if(ringtoneUri!=null)System.out.println("ringtoneUri selezionata: "+ringtoneUri.toString());Così dovrebbe funzionare, con suoneria assente e selezione di "Nessuna suoneria", in caso di impostazione di "nessuna suoneria".
Il codice che recupera ringtoneUri e quello che chiama l'activity della scelta suonerie devono essere messi insieme, perché il primo si deve ripetere ogni volta, mentre se viene lasciato in onCreate si esegue solo all'apertura dell'Activity.
Nessun commento:
Posta un commento