JavascriptProva

sabato 30 luglio 2016

Studio sull'impostazione generale delle suonerie.

Adesso dobbiamo fare un bel po' di pratica per quanto riguarda le suonerie.
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).
Perfetto!

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