Gli utenti Android sono sempre alla ricerca di app in grado di modificare il comportamento dei propri dispositivi in modi nuovi e innovativi. La piattaforma Android offre ai suoi sviluppatori molta libertà per creare tali app. In questo tutorial, imparerai come creare un'app che renda casuale la suoneria di un telefono Android ogni volta che riceve una chiamata.
Se desideri proseguire, assicurati di aver installato l'ultima versione di Android Studio. Puoi scaricarlo dal sito web degli sviluppatori Android.
Poiché questo è un tutorial intermedio, non tratterò le basi in troppi dettagli. Presumo che tu abbia già creato una o più app Android e conosca le basi dell'SDK di Android.
Avvia Android Studio e crea un nuovo progetto. Impostare il nome dell'applicazione su RingtoneRandomizer. Assicurati di scegliere un nome di pacchetto univoco.
Questa app può essere eseguita su tutti i telefoni con livello API 8 o superiore, quindi imposta l'opzione SDK minimo a Android 2.2.
Quindi, scegliere Aggiungi Nessuna Attività e fare clic finire.
La nostra app necessita delle seguenti autorizzazioni:
android.permission.READ_PHONE_STATE
per rilevare le chiamate in arrivoandroid.permission.WRITE_SETTINGS
per cambiare l'impostazione predefinita della suoneriaandroid.permission.READ_EXTERNAL_STORAGE
per recuperare l'elenco delle suonerie disponibiliAggiungi il seguente a AndroidManifest.xml:
Questa app ha uno Attività
, per consentire all'utente di attivare / disattivare il comportamento di modifica della suoneria.
Ha anche un BroadcastReceiver
per rilevare le modifiche dello stato di chiamata. Come mostrato di seguito, l'azione intent che ascolta è android.intent.action.PHONE_STATE
.
Il strings.xml il file contiene le stringhe utilizzate dall'app. Aggiornare Valori / strings.xml come mostrato di seguito:
Suoneria Randomizer Attiva Randomizer suoneria Disattiva Randomizer suoneria Suonerie disponibili su questo dispositivo:
Il Attività
ha bisogno delle seguenti opinioni:
Interruttore
per attivare / disattivare il randomizzatore della suoneriaVisualizzazione elenco
per visualizzare tutte le suonerie disponibiliTextView
che funge da etichettaCrea un file chiamato layout / activity_main.xml e sostituire il suo contenuto con il seguente. Come puoi vedere, il layout è piuttosto semplice e diretto.
RingtoneHelper
Helper ClassAl fine di evitare di affrontare il RingtoneManager
direttamente nel Attività
o il BroadcastReceiver
, creeremo una classe di supporto chiamata RingtoneHelper
.
RingtoneHelper di classe pubblica
Il RingtoneHelper
la classe avrà due metodi statici che fanno uso di RingtoneManager
classe.
fetchAvailableRingtones
Il fetchAvailableRingtones
metodo recupera l'elenco delle suonerie disponibili, restituendo a Elenco
di Suoneria
oggetti.
elenco statico pubblicofetchAvailableRingtones (contesto di contesto) List suonerie = nuovo ArrayList <> (); RingtoneManager mgr = new RingtoneManager (context); mgr.setType (RingtoneManager.TYPE_RINGTONE); int n = mgr.getCursor (). getCount (); per (int i = 0; i Nel
fetchAvailableRingtones
metodo, iniziamo creando un'istanza diRingtoneManager
classe. IlRingtoneManager
oggetto può elencare tutti i suoni disponibili sul dispositivo. Ciò include i suoni per gli allarmi e altre notifiche.Noi usiamo il
setType
metodo per impostare il suo tipo suTYPE_RINGTONE
dato che siamo interessati solo alle suonerie.Quindi invochiamo il
getCount
metodo per sapere quante suonerie sono disponibili e chiama ilgetRingtone
metodo in aper
loop, aggiungendo ogni suoneria asuonerie
.
changeRingtone
Il
changeRingtone
il metodo è responsabile della modifica della suoneria del dispositivo, la caratteristica principale della nostra app.public static void changeRingtone (Context context) SharedPreferences preferences = context.getSharedPreferences ("randomizer", Context.MODE_PRIVATE); se (! preferences.getBoolean ("active", false)) restituisce; RingtoneManager mgr = new RingtoneManager (context); Casuale casuale = nuovo Casuale (System.currentTimeMillis ()); int n = random.nextInt (mgr.getCursor (). getCount ()); RingtoneManager.setActualDefaultRingtoneUri (context, RingtoneManager.TYPE_RINGTONE, mgr.getRingtoneUri (n));Il primo check-in
SharedPreferences
se l'utente ha attivato il randomizzatore della suoneria. Quindi usiamo ilCasuale
classe per scegliere un numero casuale inferiore al numero di suonerie disponibili.Il
getRingtoneUri
il metodo viene invocato per recuperare l'URI della suoneria corrispondente e passarlo asetActualDefaultRingtoneUri
metodo per cambiare la suoneria.6. Crea Ricevitore Broadcast
Crea una nuova classe chiamata
RingReceiver
che eredita daBroadcastReceiver
. La nuova classe avrà un solo metodo chiamatoOnReceive
. In questo metodo, tutto ciò che facciamo è chiamare la classe helperchangeRingtone
metodo se sono soddisfatti i seguenti criteri:
- l'azione del ricevuto
Intento
è uguale aTelephonyManager.ACTION_PHONE_STATE_CHANGED
- il valore della chiave di ricerca
EXTRA_STATE
è uguale aTelephonyManager.EXTRA_STATE_RINGING
Questo è ciò che
RingReceiver
classe dovrebbe assomigliare:ringReceiver di classe pubblica estende BroadcastReceiver @Override public void onReceive (Context context, Intent intent) if (intent.getAction (). equals (TelephonyManager.ACTION_PHONE_STATE_CHANGED)) String callState = intent.getStringExtra (TelephonyManager.EXTRA_STATE); if (callState.equals (TelephonyManager.EXTRA_STATE_RINGING)) RingtoneHelper.changeRingtone (context);7. Crea attività
Crea una nuova classe chiamata
Attività principale
che eredita daAttività
. Noi scavalchiamo ilonCreate
metodo ed eseguire le seguenti azioni:
- invocare
setContentView
utilizzare il layout definito in activity_main.xml- chiama la classe dell'aiutante
fetchAvailableRingtones
metodo per popolare aElenco
di suonerie- inizializza il
Visualizzazione elenco
- inizializza il
Interruttore
Il
Attività principale
la classe dovrebbe ora assomigliare a qualcosa del genere:public class MainActivity estende Activity list ListView privatoOfRingtones; ToggleButton privato toggleRandomizer; Elenco privatosuonerie; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); listOfRingtones = (ListView) findViewById (R.id.list_of_ringtones); toggleRandomizer = (ToggleButton) findViewById (R.id.toggle); suonerie = RingtoneHelper.fetchAvailableRingtones (questo); initializeList (); initializeToggle ();
initializeToggle
Nel
initializeToggle
metodo impostiamo lo stato del pulsante di attivazione basato su abooleano
valore chiamato attivo nelSharedPreferences
. Questo valore è impostato sufalso
per impostazione predefinita.Aggiungiamo anche un
OnCheckedChangeListener
al pulsante di commutazione per aggiornare il valore inSharedPreferences
. IlputBoolean
ecommettere
metodi deleditore
sono usati per realizzare questo.private void initializeToggle () final SharedPreferences preferences = getSharedPreferences ("randomizer", Context.MODE_PRIVATE); booleano attivo = preferences.getBoolean ("active", false); toggleRandomizer.setChecked (attivo); toggleRandomizer.setOnCheckedChangeListener (new CompoundButton.OnCheckedChangeListener () @Override public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) preferences.edit (). putBoolean ("active", isChecked) .commit (););
initializeList
Il
initializeList
il metodo crea unAdattatore
basato sulElenco
di suonerie. Usoandroid.R.layout.simple_list_item_1
come il layout degli oggetti delVisualizzazione elenco
. Non è altro che aTextView
. Dovrebbe visualizzare il titolo della suoneria, usando ilSuoneria
La classe digetTitle
metodo. Questo dovrebbe essere fatto all'interno delGetView
metodo delAdattatore
, dopo averlo scavalcato.Una volta il
Adattatore
è pronto, assegnalo alVisualizzazione elenco
usando ilVisualizzazione elenco
'SsetAdapter
metodo.private void initializeList () ArrayAdapteradattatore = nuovo ArrayAdapter (questo, android.R.layout.simple_list_item_1, suonerie) @ Override public Visualizza getView (int position, Visualizza convertView, ViewGroup parent) TextView item = (TextView) super.getView (position, convertView, parent); item.setText (ringtones.get (posizione) .getTitle (MainActivity.this)); oggetto di reso; ; listOfRingtones.setAdapter (adattatore); 8. Compila ed esegui
La nostra app è ora pronta per essere distribuita su un telefono Android. Dovresti essere in grado di vedere tutte le suonerie disponibili sul tuo telefono quando avvii l'app. Fare clic sul pulsante di attivazione / disattivazione per attivare il randomizzatore.
Chiamati da un altro telefono un paio di volte. La prima volta che si riceve una chiamata, verrà riprodotta la suoneria originale. Dalla prossima chiamata in poi, sentirai una suoneria casuale ogni volta.
Nota che questa app cambia la suoneria predefinita del tuo telefono. Se è stata assegnata una suoneria specifica a un contatto oa un gruppo di contatti, tale suoneria verrà comunque utilizzata.
Conclusione
Ora sai come utilizzare le funzionalità disponibili in
RingtoneManager
classe. Hai anche imparato a rilevare le chiamate in arrivo. Sentiti libero di costruire su questa app per randomizzare altre notifiche in modo simile. Visita il sito Web degli sviluppatori Android per ulteriori informazioni suRingtoneManager
classe.