JavascriptProva

venerdì 14 ottobre 2016

Codice per la scelta e l'esecuzione di una suoneria personalizzata per la notifica dell'activity col bersaglio

Devo aggiungere all'activity Seconda un segnale acustico.
Non ricordo bene, ricordo che l'elemento chiave è RingtoneManager.
Vediamo...

Devo scrivere il codice per la scelta di una suoneria. Dove lo metto? Creo un'activity a parte, per il momento.

Ecco, ho creato la nuova activity SetSound, e ho impostato il codice in questo modo:
public class SetSounds extends AppCompatActivity {

    Button bttPickSound;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set_sounds);

        bttPickSound=(Button) findViewById(R.id.button5);
        bttPickSound.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
                startActivityForResult(intent,0);
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        Uri uri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        Ringtone ringtone=RingtoneManager.getRingtone(getApplicationContext(),uri);
        ringtone.play();
    }
}
Funziona: mi consente di scegliere la suoneria.

Ora devo vedere come impostare la suoneria come default...

Seguo questo link per impostare una suoneria come default.

Ecco, intanto seguendo l'autotutorial ho scritto questo, che dovrebbe impostare tutte le suonerie di tipo NOTIFICATION a quella scelta da me ora.
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        Uri uri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        Ringtone ringtone=RingtoneManager.getRingtone(getApplicationContext(),uri);
        RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(),RingtoneManager.TYPE_NOTIFICATION,uri);
    }
Ora però io vorrei l'impostazione della suoneria alla sola applicazione, e non per tutte le notifiche.
Facciamo la prova se così si impostano tutte le suonerie di tipo notifiche.
Al momento io ho come notifica generale impostata la suoneria Skyline (assumendo sia in DO, è quella col suono "DO MI DO+ SI SOL").
Provo a cambiarla facendo girare l'applicazione...

E ci vuole permission.WRITE_SETTINGS, che provvedo a scrivere in Manifest, quindi riprovo...

Sì, perfetto!

Ora devo cambiarla in modo personalizzato.
Seguo questo autotutorial

La tecnica è quella di ripescare dalle SharedPreferences la suoneria, con un default stringa vuota.
Se non è vuota, allora Uri.parse la stringa risultante.
Per l'impostazione, porre in SharedPreferences Uri.toString.

Proviamo...

Il codice per l'impostazione, sull'activity SetSounds:
public class SetSounds extends AppCompatActivity {

    SharedPreferences SP;
    Button bttPickSound;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set_sounds);

        SP=getApplicationContext().getSharedPreferences("suonerie", Context.MODE_PRIVATE);
        bttPickSound=(Button) findViewById(R.id.button5);
        bttPickSound.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
                startActivityForResult(intent,0);
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        Uri uri=data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        Ringtone ringtone=RingtoneManager.getRingtone(getApplicationContext(),uri);
        SharedPreferences.Editor editor=SP.edit();
        editor.putString("suoneria",uri.toString());
        editor.commit();

    }
}


Il codice per la lettura, sull'activity Seconda:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seconda);
        SP = this.getSharedPreferences("intervalli",Context.MODE_PRIVATE);
        SP2=this.getSharedPreferences("suonerie",Context.MODE_PRIVATE);


        vibrator=(Vibrator)this.getSystemService(Context.VIBRATOR_SERVICE);

        //codice per il rilevamento e l'esecuzione della suoneria personalizzata
        //(a ogni comparsa dell'activity col bersaglio)

        String strSuoneria=SP2.getString("suoneria","");
        if(TextUtils.isEmpty(strSuoneria)){
            ringtoneUri= RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(),RingtoneManager.TYPE_NOTIFICATION);
        }else{
            ringtoneUri=Uri.parse(strSuoneria);
        }
        Ringtone ringtone=RingtoneManager.getRingtone(getApplicationContext(),ringtoneUri);
        ringtone.play();
        //fine codice per rilevamento ed esecuzione della suoneria personalizzata.

Nessun commento:

Posta un commento