auf Ich erstelle Benachrichtigungen in meiner Android-Anwendung und möchte in meinen Einstellungen eine Option festlegen, welche Töne für die Benachrichtigung verwendet werden. Ich weiß, dass Sie in der Anwendung "Einstellungen" einen Standardbenachrichtigungston aus einer Liste auswählen können. Woher kommt diese Liste, und gibt es eine Möglichkeit für mich, dieselbe Liste in meiner Anwendung anzuzeigen?So rufen Sie die Liste der verfügbaren Benachrichtigungstöne auf Android
Antwort
Kopieren Sie einfach Code aus einer meiner Apps, der das tut, wonach Sie suchen.
Dies ist in einem onClick-Handler einer Taste "Set Klingelton" oder etwas ähnliches markiert:
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
this.startActivityForResult(intent, 5);
Und dieser Code fängt die vom Benutzer vorgenommene Auswahl:
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent)
{
if (resultCode == Activity.RESULT_OK && requestCode == 5)
{
Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (uri != null)
{
this.chosenRingtone = uri.toString();
}
else
{
this.chosenRingtone = null;
}
}
}
Auch ich raten Sie meinen Nutzern, die App "Rings Extended" aus dem Android Market zu installieren. Jedes Mal, wenn dieser Dialog auf seinem Gerät geöffnet wird, z. B. über meine App oder über das Einstellungsmenü des Telefons, hat der Benutzer die zusätzliche Wahl, alle auf seinem Gerät gespeicherten MP3s auszuwählen, nicht nur die eingebauten Klingeltöne.
Oder einfach halten diese XML in Ihre Vorlieben:
<RingtonePreference android:showDefault="true"
android:key="Audio" android:title="Alarm Noise"
android:ringtoneType="notification" />
Vollständiger Inhalt meiner XML-Beispiel nur für Kontext:
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference android:title="Some value"
android:key="someval"
android:summary="Please provide some value" />
<EditTextPreference android:title="Some other value"
android:key="someval2"
android:summary="Please provide some other value" />
<RingtonePreference android:showDefault="true"
android:key="Audio" android:title="Alarm Noise"
android:ringtoneType="notification" />
</PreferenceScreen>
Dieser sieht besser aus .. – Mohsen
Dies ist die Methode, die ich verwenden, um eine Liste der Benachrichtigungs Sounds zu bekommen im Telefon verfügbar :)
public Map<String, String> getNotifications() {
RingtoneManager manager = new RingtoneManager(this);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();
Map<String, String> list = new HashMap<>();
while (cursor.moveToNext()) {
String notificationTitle = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX);
String notificationUri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX);
list.put(notificationTitle, notificationUri);
}
return list;
}
EDIT: Dies ist für den Kommentar zur Einstellung der Sound im NotificationCompat.Builder. Diese Methode erhält stattdessen die ID des Klingeltons, die das Telefon verwendet, anstelle des menschlich lesbaren TITLE der anderen Methode. Kombinieren Sie die URL und die ID und Sie haben den Standort der Klingeltöne.
public ArrayList<String> getNotificationSounds() {
RingtoneManager manager = new RingtoneManager(this);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();
ArrayList<String> list = new ArrayList<>();
while (cursor.moveToNext()) {
String id = cursor.getString(RingtoneManager.ID_COLUMN_INDEX);
String uri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX);
list.add(uri + "/" + id);
}
return list;
}
Der obige Code wird eine Liste von Zeichenketten wie zurückkehren „Inhalt: // media/intern/Audio/media/27“ .. Sie dann eine dieser Zeichenketten als Uri in die passieren können. setSound() wie:
.setSound(Uri.parse("content://media/internal/audio/media/27"))
Hoffnung, die klar genug war :)
Das ist nett, aber wie stellen Sie den Sound mit NotificationCompat.Builder.setSound (URI)? Einstellung eines der Uri Lesung aus dem RingtoneManager funktioniert nicht – infero
Ich habe den Beitrag mit der Antwort @infero bearbeitet, hoffe, es ist klar und löst Ihr Problem! – Murphybro2
danke für das Update. Ich habe versucht, den Sound auf diese Weise mit der ID vor, aber verwendet eine ID, die nicht existierte - :-(Grrrr. Nochmals vielen Dank – infero
- 1. Android - So rufen Sie die Liste der registrierten Geofences ab
- 2. Verhindern mehrere Benachrichtigungstöne android
- 3. So erweitern Sie die Liste der verfügbaren Java-Sprachumgebungen
- 4. Android - So rufen Sie Wechselkurse
- 5. So rufen Sie die Supermethode auf?
- 6. So rufen Sie die validateValue-Methode auf
- 7. So rufen Sie die WCF-URL auf?
- 8. Erhalten Sie eine Liste der verfügbaren Inhaltsanbieter
- 9. Liste der verfügbaren Kulturen
- 10. So rufen Sie Monitor.TryEnter auf
- 11. Ermitteln der verfügbaren Speicher auf Android
- 12. So rufen Sie die Fragmentmethode aus der Hauptaktivität auf
- 13. So rufen Sie die Erweiterungsmethode "ElementAt" der Liste <T> mit Reflektion auf?
- 14. So rufen Sie ein Fragment auf oder rufen es auf, wenn Sie auf klicken.
- 15. Rufen Sie jede Funktion in der Liste
- 16. Liste der verfügbaren VS2010 Hotfixes
- 17. So rufen Sie ein Array auf?
- 18. So rufen Sie Tooltip beim Klicken auf die Schaltfläche auf
- 19. So rufen Sie einen WCF-Dienst mit ksoap2 auf Android?
- 20. So rufen Sie verpasste Anrufe auf Android SDK 2.2
- 21. So rufen Sie einen .NET-Webdienst von Android auf?
- 22. Homebrew Liste der verfügbaren Compiler
- 23. Android - So erhalten Sie die Liste der AudioManager/AudioSystem-Parameter
- 24. py2neo: So rufen Sie die Knotenbezeichnung ab
- 25. So rufen Sie die aufgelöste URL
- 26. So rufen Sie ein Bool auf Knopfdruck
- 27. So rufen Sie ViewChild in Runtime auf?
- 28. So rufen Sie das SSIS-Paket auf
- 29. So rufen Sie UDF in DataStage auf?
- 30. So rufen Sie den Hintergrundthread auf
Viele you.I Lage ist Klingelton angezeigt werden erfolgreich Ihren Code aber in ** onActivityResult() ** Methode ich erhalte Fehler " Es kann keine statische Referenz auf die nicht statische Methode getParcellableExtra (String) von der Typ Intent "an deiner Linie" Uri uri = Intent.getParcelableExtra (RingtoneManager.EXTRA_RINGTONE_PICKED_URI); " – Dharmendra
Diese Zeile sollte "Uri uri = intent.getParcelableExtra ..." lesen. Beachte das Lowcase "i" in "intent". Nur ein Tipp auf den obigen Code. – zeh
Hilfreiche Code und beachten Sie den kleinen Buchstaben in intent.getParcelableExtra ... Vielen Dank – djk