Программно установить пользовательскую мелодию уведомления (выберите из файлов AUDIO в мобильном телефоне) для приложения

Я хочу перечислить все доступные файлы AUDIO (.mp3) в мобильном устройстве.

Пользователь может выбрать любой аудио файл из списка и может установить в качестве тона уведомления для этого приложения.

Я разработал много источников, и ни один из них не был удовлетворительным.

Спасибо.

1 ответ

Сначала получите все доступные mp3-файлы и получите их имена, используя приведенный ниже код, делайте все, что захотите, с полученными данными, например, вы можете настроить вид списка или отобразить их в диалоговом окне и т. Д.

  String extPath = getSecondaryStorage();
           if (extPath != null)
            { mySongs_onSystem = findSongs(new File(extPath));
         }
            else
                mySongs_onSystem = findSongs(Environment.getExternalStorageDirectory());

             public ArrayList<File> findSongs(File root) {
                    ArrayList<File> al = new ArrayList<>();
                    File[] files = root.listFiles();
                    for (File singleFile : files) {
                        if (singleFile.isDirectory()) {
                            al.addAll(findSongs(singleFile));
                        } else {
                            if (singleFile.getName().endsWith(".mp3") || singleFile.getName().endsWith(".Mp3") || singleFile.getName().endsWith(".wav")) {
                                al.add(singleFile);
                            }
                        }

                    }
                    return al;
                }
 private String getSecondaryStorage() {


        String strSDCardPath = System.getenv("SECONDARY_STORAGE");

        if ((strSDCardPath == null) || (strSDCardPath.length() == 0)) {
            strSDCardPath = System.getenv("EXTERNAL_SDCARD_STORAGE");
        }

        //If may get a full path that is not the right one, even if we don't have the SD Card there.
        //We just need the "/mnt/extSdCard/" i.e and check if it's writable
        if (strSDCardPath != null) {
            if (strSDCardPath.contains(":")) {
                strSDCardPath = strSDCardPath.substring(0, strSDCardPath.indexOf(":"));
            }
            File externalFilePath = new File(strSDCardPath);

            if (externalFilePath.exists() && externalFilePath.canWrite()) {
                return strSDCardPath;
            }
        }
        return null;
    }

получить имена всех mp3-файлов, используя цикл for, как это.

    for (int i = 0; i < mySongs_onSystem.size(); i++) {
    //declare a string array in global String[] songNames;
 songNames[i] = mySongs_onSystem.get(i).getName().toString().replace(".mp3", "").replace(".Mp3", "").replace(".wav", "");
            Log.i("songname", songNames[i]);
        }

передать массив строк полученных mp3-тонов и прикрепить его к списку адаптера, чтобы показать все имена песен в списке, и прикрепить прослушиватель щелчка и

store the uri of the selected mp3 
Uri u = Uri.parse(mySongs_onSystem.get(position).getAbsolutePath());

создайте пользовательский интерфейс, который запускается при получении уведомления, а затем воспроизводите выбранный аудиофайл mp3 с помощью медиаплеера, например:

  mMediaPlayer = new MediaPlayer();
     mMediaPlayer = MediaPlayer.create(getApplicationContext(),u);
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mMediaPlayer.setLooping(true);
    mMediaPlayer.start();
Другие вопросы по тегам