Tworzę powiadomienia w mojej aplikacji na Androida i chciałbym mieć opcję w moich preferencjach, aby ustawić dźwięk używany do powiadomienia. Wiem, że w aplikacji Ustawienia możesz wybrać domyślny dźwięk powiadomienia z listy. Skąd się bierze ta lista i czy istnieje sposób, aby wyświetlić tę samą listę w mojej aplikacji?Jak wyświetlić listę dostępnych dźwięków powiadomień na Androidzie
Odpowiedz
Wystarczy skopiować/wkleić kod z jednej z moich aplikacji, która robi to, czego szukasz.
Jest w obsługi onClick przycisku oznaczonego „ustawić dzwonek” lub coś podobnego:
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);
I ten kod przechwytuje wyboru dokonanego przez użytkownika:
@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;
}
}
}
Również ja doradzaj moim użytkownikom, aby zainstalowali aplikację "Rings Extended" z Android Market. Wtedy, gdy to okno dialogowe zostanie otwarte na ich urządzeniu, np. Z mojej aplikacji lub z menu ustawień telefonu, użytkownik będzie miał dodatkową możliwość wyboru dowolnego z plików mp3 zapisanych na ich urządzeniu, a nie tylko wbudowanych dzwonków.
Albo po prostu trzymać to w XML preferencje:
<RingtonePreference android:showDefault="true"
android:key="Audio" android:title="Alarm Noise"
android:ringtoneType="notification" />
Pełna treść mojego próbki XML tylko do kontekstu:
<?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>
Ta wygląda lepiej .. – Mohsen
Jest to metoda używam, aby uzyskać listę dźwięków powiadomień dostępne w telefonie :)
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;
}
EDYCJA: Jest to komentarz dotyczący ustawiania dźwięk w NotificationCompat.Builder. Ta metoda pobiera identyfikator dzwonka, którego używa telefon, zamiast czytelnego pliku TITLE, do którego trafiła inna metoda. Połącz identyfikator URI i identyfikator, a otrzymasz lokalizację dzwonków.
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;
}
Powyższy kod zwróci listę ciągów jak "content: // nośnik/wewnętrzny/audio/media/27" .. można następnie przekazać jeden z tych ciągów jako Uri Into the. setSound() jak:
.setSound(Uri.parse("content://media/internal/audio/media/27"))
nadzieję, że było wystarczająco jasne :)
To miło, ale jak ustawić dźwięk, który będzie odtwarzany za pomocą NotificationCompat.Builder.setSound (uri)? Ustawienie jednego z odczytów Uri z RingtoneManager nie działa – infero
Edytowałem post z odpowiedzią @infero, mam nadzieję, że jest jasne i rozwiązuje twój problem! – Murphybro2
dzięki za aktualizację. Próbowałem ustawić dźwięk w ten sposób z wcześniejszym identyfikatorem, ale użyłem identyfikatora, który nie istniał - :-(grrrr. Jeszcze raz dziękuję – infero
Dziękuję you.I jestem w stanie wyświetlić dzwonek z powodzeniem przy użyciu kodu Ale ** onActivityResult() błędu ** metoda Dostaję " Nie można utworzyć statycznego odwołania do niestatycznej metody getParcelableExtra (String) z wpisz Intent "at your line" Uri uri = Intent.getParcelableExtra (RingtoneManager.EXTRA_RINGTONE_PICKED_URI); " – Dharmendra
Ten wiersz powinien brzmieć "Uri uri = intent.getParcelableExtra ...". Zwróć uwagę na "i" w "intencji". Tylko literówka na powyższym kodzie. – zeh
Pomocny kod i umysł mała litera w intent.getParcelableExtra ... Wielkie dzięki – djk