Android-Nutzer sind ständig auf der Suche nach Apps, die das Verhalten ihrer Geräte auf neue und innovative Weise verändern können. Die Android-Plattform gibt ihren Entwicklern viel Freiheit, um solche Apps zu erstellen. In diesem Lernprogramm erfahren Sie, wie Sie eine App erstellen, mit der der Klingelton eines Android-Telefons bei jedem Anruf randomisiert wird.
Wenn Sie mitverfolgen möchten, stellen Sie sicher, dass Sie die neueste Version von Android Studio installiert haben. Sie können es von der Android Developer-Website erhalten.
Da es sich um ein Zwischenlehrgang handelt, werde ich die Grundlagen nicht zu detailliert behandeln. Ich gehe davon aus, dass Sie bereits eine oder mehrere Android-Apps erstellt haben und mit den Grundlagen des Android-SDK vertraut sind.
Starten Sie Android Studio und erstellen Sie ein neues Projekt. Legen Sie den Namen der Anwendung auf fest RingtoneRandomizer. Stellen Sie sicher, dass Sie einen eindeutigen Paketnamen auswählen.
Diese App kann auf allen Telefonen mit API-Level 8 oder höher ausgeführt werden Mindest-SDK zu Android 2.2.
Als nächstes wählen Sie Keine Aktivität hinzufügen und klicken Sie auf Fertig.
Unsere App benötigt die folgenden Berechtigungen:
android.permission.READ_PHONE_STATE
eingehende Anrufe erkennenandroid.permission.WRITE_SETTINGS
um die voreingestellte Klingeltoneinstellung zu ändernandroid.permission.READ_EXTERNAL_STORAGE
um die Liste der verfügbaren Klingeltöne abzurufenFügen Sie Folgendes zu hinzu AndroidManifest.xml:
Diese App hat eine Aktivität
, Damit kann der Benutzer das Verhalten beim Ändern des Klingeltons aktivieren / deaktivieren.
Es hat auch eine Rundfunkempfänger
Anrufzustandsänderungen erkennen. Wie unten gezeigt, ist die beabsichtigte Aktion, auf die es sich hört android.intent.action.PHONE_STATE
.
Das strings.xml Datei enthält die von der App verwendeten Zeichenfolgen. Aktualisieren Werte / Zeichenfolgen.xml Wie nachfolgend dargestellt:
Klingelton-Zufallsgenerator Ringtone Randomizer aktivieren Deaktivieren Sie den Ringtone Randomizer Klingeltöne auf diesem Gerät verfügbar:
Das Aktivität
benötigt die folgenden Ansichten:
Umschaltknopf
um den Klingelton-Randomizer zu aktivieren / deaktivierenListenansicht
um alle verfügbaren Klingeltöne anzuzeigenTextvorschau
das fungiert als LabelErstellen Sie eine Datei mit dem Namen layout / activity_main.xml und ersetzen Sie den Inhalt durch Folgendes. Wie Sie sehen, ist das Layout ziemlich einfach und unkompliziert.
KlingeltonHelper
HelferklasseUm den Umgang mit dem zu vermeiden KlingeltonManager
direkt in der Aktivität
oder der Rundfunkempfänger
, Wir werden eine Helfer-Klasse namens erstellen KlingeltonHelper
.
öffentliche Klasse RingtoneHelper
Das KlingeltonHelper
Klasse hat zwei statische Methoden, die die KlingeltonManager
Klasse.
fetchAvailableRingtones
Das fetchAvailableRingtones
Methode ruft die Liste der verfügbaren Klingeltöne ab und gibt a zurück Liste
von Klingelton
Objekte.
öffentliche statische ListefetchAvailableRingtones (Kontextkontext) Liste Klingeltöne = neue ArrayList <> (); RingtoneManager mgr = neuer RingtoneManager (Kontext); mgr.setType (RingtoneManager.TYPE_RINGTONE); int n = mgr.getCursor (). getCount (); für (int i = 0; i Im
fetchAvailableRingtones
Methode erstellen wir zunächst eine Instanz vonKlingeltonManager
Klasse. DasKlingeltonManager
object kann alle auf dem Gerät verfügbaren Sounds auflisten. Dies umfasst die Töne für Alarme und andere Benachrichtigungen.Wir nehmen das
setType
Methode, um den Typ festzulegenTYPE_RINGTONE
da uns nur Klingeltöne interessieren.Wir rufen dann die
getCount
Um zu wissen, wie viele Klingeltöne verfügbar sind, rufen Sie dieEinen Klingelton bekommen
Methode in einemzum
Hinzufügen von Klingeltönen zuKlingeltöne
.
changeRingtone
Das
changeRingtone
Die Methode ist für die Änderung des Klingeltons des Geräts, der Kernfunktion unserer App, verantwortlich.public static void changeRingtone (Kontextkontext) SharedPreferences preferences = context.getSharedPreferences ("randomizer", Context.MODE_PRIVATE); if (! preferences.getBoolean ("aktiv", false)) return; RingtoneManager mgr = neuer RingtoneManager (Kontext); Random random = new Random (System.currentTimeMillis ()); int n = random.nextInt (mgr.getCursor (). getCount ()); RingtoneManager.setActualDefaultRingtoneUri (Kontext, RingtoneManager.TYPE_RINGTONE, mgr.getRingtoneUri (n));Wir checken erst ein
Gemeinsame Einstellungen
Wenn der Benutzer den Klingelton-Randomizer aktiviert hat. Wir benutzen dann dieZufällig
Klasse, um eine Zufallszahl auszuwählen, die unter der Anzahl der verfügbaren Klingeltöne liegt.Das
getRingtoneUri
Die Methode wird aufgerufen, um den URI des entsprechenden Klingeltons abzurufen und an den zu übergebensetActualDefaultRingtoneUri
Methode, um den Klingelton zu ändern.6. Erstellen Sie einen Broadcast-Empfänger
Erstellen Sie eine neue Klasse mit dem Namen
Ringempfänger
das erbt vonRundfunkempfänger
. Für die neue Klasse wird nur eine Methode benanntonReceive
. In dieser Methode nennen wir nur die HilfsklassechangeRingtone
Methode, wenn folgende Kriterien erfüllt sind:
- die handlung der empfangenen
Absicht
entsprichtTelephonyManager.ACTION_PHONE_STATE_CHANGED
- der Wert des Suchschlüssels
EXTRA_STATE
entsprichtTelephonyManager.EXTRA_STATE_RINGING
Das ist was der
Ringempfänger
Klasse sollte aussehen:Die öffentliche Klasse RingReceiver erweitert BroadcastReceiver @Override public void onReceive (Kontext-Kontext, beabsichtigte Absicht) 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 (Kontext);7. Erstellen Sie eine Aktivität
Erstellen Sie eine neue Klasse mit dem Namen
Hauptaktivität
das erbt vonAktivität
. Wir überschreiben dasonCreate
Methode und führen Sie die folgenden Aktionen aus:
- aufrufen
setContentView
das in. definierte Layout verwenden activity_main.xml- Rufe die Helferklasse an
fetchAvailableRingtones
Methode zum Auffüllen aListe
von Klingeltönen- initialisieren Sie die
Listenansicht
- initialisieren Sie die
Umschaltknopf
Das
Hauptaktivität
Die Klasse sollte nun etwa so aussehen:public class MainActivity erweitert Activity private ListView listOfRingtones; private ToggleButton toggleRandomizer; private ListeKlingeltöne; @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); Klingeltöne = KlingeltonHelper.fetchAvailableRingtones (this); initializeList (); initializeToggle ();
initializeToggle
In dem
initializeToggle
Methode setzen wir den Status der Toggle-Schaltfläche basierend auf einemboolean
Wert benannt aktiv imGemeinsame Einstellungen
. Dieser Wert ist auf gesetztfalsch
standardmäßig.Wir fügen auch eine
OnCheckedChangeListener
Klicken Sie auf die Schaltfläche, um den Wert in zu aktualisierenGemeinsame Einstellungen
. DasputBoolean
undverpflichten
Methoden derEditor
werden verwendet, um dies zu erreichen.private void initializeToggle () final SharedPreferences preferences = getSharedPreferences ("randomizer", Context.MODE_PRIVATE); boolean active = preferences.getBoolean ("aktiv", false); toggleRandomizer.setChecked (aktiv); toggleRandomizer.setOnCheckedChangeListener (neuer CompoundButton.OnCheckedChangeListener () @Override public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) preferences.edit (). putBoolean ("aktiv", isChecked).
initializeList
Das
initializeList
Methode erstellt einAdapter
basierend aufListe
von Klingeltönen. Benutzenandroid.R.layout.simple_list_item_1
wie das Layout der Elemente derListenansicht
. Es ist nichts anderes als einTextvorschau
. Es sollte der Titel des Klingeltons angezeigt werdenKlingelton
KlassegetTitle
Methode. Dies sollte in der gemacht werdengetView
Methode derAdapter
, nach dem Überschreiben.Einmal die
Adapter
ist fertig, ordnen Sie es dem zuListenansicht
mit derListenansicht
'ssetAdapter
Methode.private void initializeList () ArrayAdapteradapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, Klingeltöne) @Override public View getView (int-Position, View convertView, ViewGroup-übergeordnetes Element) TextView-Element = (TextView) super.getView (position, convertView, parent); item.setText (ringtones.get (position) .getTitle (MainActivity.this)); Artikel zurückgeben; ; listOfRingtones.setAdapter (Adapter); 8. Kompilieren und ausführen
Unsere App kann jetzt auf einem Android-Handy bereitgestellt werden. Sie sollten in der Lage sein, alle auf Ihrem Telefon verfügbaren Klingeltöne zu sehen, wenn Sie die App starten. Klicken Sie auf die Umschaltfläche, um den Randomizer zu aktivieren.
Rufen Sie sich ein paar Mal von einem anderen Telefon an. Wenn Sie zum ersten Mal einen Anruf erhalten, wird der ursprüngliche Klingelton wiedergegeben. Ab dem nächsten Anruf hören Sie jedes Mal einen zufälligen Klingelton.
Beachten Sie, dass diese App den Standardklingelton Ihres Telefons ändert. Wenn Sie einem Kontakt oder einer Gruppe von Kontakten einen bestimmten Klingelton zugewiesen haben, wird dieser weiterhin verwendet.
Fazit
Sie wissen jetzt, wie Sie die im Internet verfügbaren Funktionen nutzen können
KlingeltonManager
Klasse. Sie haben auch gelernt, eingehende Anrufe zu erkennen. Fühlen Sie sich frei, auf dieser App zu bauen, um andere Benachrichtigungen auf ähnliche Weise zufällig zu sortieren. Besuchen Sie die Android Developer-Website, um weitere Informationen zu erhaltenKlingeltonManager
Klasse.