2017-01-12 1 views
1

Je souhaite répertorier tous les fichiers AUDIO (.mp3) disponibles dans l'appareil mobile.Définir par programme la sonnerie de notification personnalisée (Choisissez parmi les fichiers AUDIO dans Mobile) pour l'application

L'utilisateur peut sélectionner n'importe quel fichier audio de la liste et peut définir comme une tonalité de notification pour cette application.

J'ai travaillé sur de nombreuses sources et aucune d'entre elles n'est satisfaisante.

Merci.

Répondre

1

d'abord obtenir tous les fichiers mp3 disponibles et retreive leur nom en utilisant le code ci-dessous ne quel que soit u want avec les données retreived pour par exemple u peut mettre en place une vue sur la liste ou les montrant dans une boîte de dialogue, etc.

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; 
    } 

récupérez les noms de tous les fichiers mp3 en utilisant une boucle for comme ceci.

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]); 
     } 

passer le tableau de chaînes de tons retreived mp3 et le joindre à la liste adaptateur pour afficher tous les noms de la chanson dans une liste et joindre un écouteur de clic et

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

créer une interface personnalisée qui se déclenche lorsque notification arrive et ensuite lire le mp3 audio sélectionné en utilisant un lecteur multimédia comme celui-ci:

mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer = MediaPlayer.create(getApplicationContext(),u); 
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mMediaPlayer.setLooping(true); 
    mMediaPlayer.start(); 
+0

Merci Roy pour votre réponse, son fonctionnement, mais ce morceau de code obtenir System Ringtone (Mobile device def ault Sonnerie pas .Mp3 fichiers de format) seulement. J'ai besoin de tous les fichiers au format .mp3 (Ex: Movie Songs aussi) pour être listés. –

+0

première boucle à travers le Environment.getExternalStorageDirectory() comme ceci: ArrayList mySongs_onSystem = findSongs (Environment.getExternalStorageDirectory()); –

+0

A travaillé comme un charme. Tu as sauvé mon temps. Environment.getExternalStorageDirectory() se réfère à SdCard0 i.e Internal Storage, je vais vérifier celui-là. Je vous remercie. –