Специальный способ обнаружения пользовательских звуков уведомлений в Android
В настоящее время я предлагаю функциональные возможности для моего приложения, для которых я отображаю все доступные звуки системных уведомлений для пользователя.
Теперь я хочу обнаружить пользовательские звуки уведомлений, которые могут быть во внутренней памяти, а также на SD-карте.
В настоящее время я думаю о том, чтобы получить список всех доступных аудиофайлов и затем отфильтровать их по продолжительности (поскольку звуки уведомлений очень короткие).
Есть ли лучший подход для обнаружения пользовательских звуков уведомлений на устройстве? Ответы с соответствующим кодом будут высоко оценены.
1 ответ
Решение
RingtoneManager.getCursor()
дает вам способ получить все мелодии. Посмотрите ниже код RingtoneManager.getCursor()
,
/**
364 * Returns a {@link Cursor} of all the ringtones available. The returned
365 * cursor will be the same cursor returned each time this method is called,
366 * so do not {@link Cursor#close()} the cursor. The cursor can be
367 * {@link Cursor#deactivate()} safely.
368 * <p>
369 * If {@link RingtoneManager#RingtoneManager(Activity)} was not used, the
370 * caller should manage the returned cursor through its activity's life
371 * cycle to prevent leaking the cursor.
372 * <p>
373 * Note that the list of ringtones available will differ depending on whether the caller
374 * has the {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission.
375 *
376 * @return A {@link Cursor} of all the ringtones available.
377 * @see #ID_COLUMN_INDEX
378 * @see #TITLE_COLUMN_INDEX
379 * @see #URI_COLUMN_INDEX
380 */
381 public Cursor getCursor() {
382 if (mCursor != null && mCursor.requery()) {
383 return mCursor;
384 }
385
386 final Cursor internalCursor = getInternalRingtones();
387 final Cursor mediaCursor = getMediaRingtones();
388
389 return mCursor = new SortCursor(new Cursor[] { internalCursor, mediaCursor },
390 MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
391 }