Erstellen Sie einen Klingelton-Zufallsgenerator für Android

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.

Voraussetzungen

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.

1. Erstellen Sie ein neues Projekt

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.

2. Manifest bearbeiten

Unsere App benötigt die folgenden Berechtigungen:

  • android.permission.READ_PHONE_STATE eingehende Anrufe erkennen
  • android.permission.WRITE_SETTINGS um die voreingestellte Klingeltoneinstellung zu ändern
  • android.permission.READ_EXTERNAL_STORAGE um die Liste der verfügbaren Klingeltöne abzurufen

Fü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.

    

3. Bearbeiten Sie die Datei strings.xml

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: 

4. Erstellen Sie das Aktivitätslayout

Das Aktivität benötigt die folgenden Ansichten:

  • ein Umschaltknopf um den Klingelton-Randomizer zu aktivieren / deaktivieren
  • ein Listenansicht um alle verfügbaren Klingeltöne anzuzeigen
  • ein Textvorschau das fungiert als Label

Erstellen 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.

     

5. Anlegen KlingeltonHelper Helferklasse

Um 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 Liste fetchAvailableRingtones (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 von KlingeltonManager Klasse. Das KlingeltonManager 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 festzulegen TYPE_RINGTONE da uns nur Klingeltöne interessieren.

Wir rufen dann die getCount Um zu wissen, wie viele Klingeltöne verfügbar sind, rufen Sie die Einen Klingelton bekommen Methode in einem zum Hinzufügen von Klingeltönen zu Klingeltö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 die Zufä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 übergeben setActualDefaultRingtoneUri 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 von Rundfunkempfänger. Für die neue Klasse wird nur eine Methode benannt onReceive. In dieser Methode nennen wir nur die Hilfsklasse changeRingtone Methode, wenn folgende Kriterien erfüllt sind:

  • die handlung der empfangenen Absicht entspricht TelephonyManager.ACTION_PHONE_STATE_CHANGED
  • der Wert des Suchschlüssels EXTRA_STATE entspricht TelephonyManager.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 von Aktivität. Wir überschreiben das onCreate 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 a Liste 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 Liste Klingeltö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 einem boolean Wert benannt aktiv im Gemeinsame Einstellungen. Dieser Wert ist auf gesetzt falsch standardmäßig.

Wir fügen auch eine OnCheckedChangeListener Klicken Sie auf die Schaltfläche, um den Wert in zu aktualisieren Gemeinsame Einstellungen. Das putBoolean und verpflichten Methoden der Editor 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 ein Adapter basierend auf Liste von Klingeltönen. Benutzen android.R.layout.simple_list_item_1 wie das Layout der Elemente der Listenansicht. Es ist nichts anderes als ein Textvorschau. Es sollte der Titel des Klingeltons angezeigt werden Klingelton Klasse getTitle Methode. Dies sollte in der gemacht werden getView Methode der Adapter, nach dem Überschreiben.

Einmal die Adapter ist fertig, ordnen Sie es dem zu Listenansicht mit der Listenansicht's setAdapter Methode.

private void initializeList () ArrayAdapter adapter = 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 erhalten KlingeltonManager Klasse.