Jak wyświetlić listę dostępnych dźwięków powiadomień na Androidzie
Tworzę powiadomienia w mojej aplikacji na Androida i chciałbym mieć opcję w moich preferencjach, aby ustawić, jaki dźwięk jest używany do powiadomienia. Wiem, że w aplikacji Ustawienia można wybrać domyślny dźwięk powiadomienia z listy. Skąd pochodzi ta lista i czy istnieje sposób na wyświetlenie tej samej listy w mojej aplikacji?
3 answers
Po prostu skopiuj / wklej kod z jednej z moich aplikacji, który robi to, czego szukasz.
To jest w onclick obsługi przycisku oznaczonego "set ringtone" 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 oddaje wybór dokonany 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;
}
}
}
Ponadto radzę moim użytkownikom zainstalować aplikację "Rings Extended" z Android Market. Następnie za każdym razem, gdy to okno dialogowe zostanie otwarte na swoim urządzeniu, na przykład z mojej aplikacji lub z menu ustawień telefonu, użytkownik będzie miał dodatkowy wybór wyboru dowolnego z MP3 przechowywanych na urządzeniu, a nie tylko wbudowanych dzwonków.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-06 15:15:50
Lub po prostu wsadź to w swoje preferencje XML:
<RingtonePreference android:showDefault="true"
android:key="Audio" android:title="Alarm Noise"
android:ringtoneType="notification" />
Pełna treść mojego przykładowego XML tylko dla 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 08:49:50
Jest to metoda, której używam, aby uzyskać listę dźwięków powiadomień dostępnych 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;
}
EDIT: chodzi o komentarz dotyczący ustawienia dźwięku w NotificationCompat.Budowniczy. Ta metoda pobiera identyfikator dzwonka, który jest tym, czego używa telefon, zamiast czytelnego dla człowieka tytułu, który otrzymała inna metoda. Połącz uri i id, 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 takich jak "content://media/internal/audio/media/27".. następnie można przekazać jeden z tych ciągów jako Uri do .setSound () like:
.setSound(Uri.parse("content://media/internal/audio/media/27"))
Mam nadzieję, że to było wystarczająco jasne:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 08:18:46