2010-09-17 3 views
3

Je sais qu'après avoir téléchargé un mp3 depuis votre application, vous devez l'ajouter au ContentResolver pour le voir sur le lecteur de musique. Je le fais avec le code suivant:Ajout de mp3 au ContentResolver

private void addFileToContentProvider() { 
     ContentValues values = new ContentValues(7); 

     values.put(Media.DISPLAY_NAME, "display_name"); 
     values.put(Media.ARTIST, "artist"); 
     values.put(Media.ALBUM, "album"); 
     values.put(Media.TITLE, "Title"); 
     values.put(Media.MIME_TYPE, "audio/mp3"); 
     values.put(Media.IS_MUSIC, true); 
     values.put(Media.DATA, pathToFile); 

     context.getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); 

    } 

Mon problème est que je suis prêt à éviter de mettre en DISPLAY_NAME, ARTIST, ALBUM, TITLE à la main.

Existe-t-il un moyen de dire à Android de le faire à partir du fichier? J'ai déjà utilisé seulement values.put(Media.DATA, pathToFile); mais cela ne l'ajoute pas au lecteur.

Existe-t-il un moyen de forcer le thread qui analyse la sd pour la musique?

Répondre

4

d'abord essayer d'ajouter ceci:

values.put(MediaStore.Audio.Media.IS_MUSIC, true); 

Ensuite, essayez ceci:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); 

Si cela ne fonctionne pas, essayez ceci:

public MediaScannerConnection mScanner = null; 

public void reScan(String filename){ 
    final String name = filename; 
    mScanner = new MediaScannerConnection(THE_NAME_OF_YOUR_ACTIVITY.this, new MediaScannerConnection.MediaScannerConnectionClient() { 
     public void onMediaScannerConnected() { 
      mScanner.scanFile(name, null); 
     } 
     public void onScanCompleted(String path, Uri uri) { 
      if (path.equals(name)) { 
       mScanner.disconnect(); 
      } 
     } 
    }); 
    mScanner.connect(); 
} 

Après avoir ajouté un mp3, juste appelez cette méthode qui prend le nom du fichier comme entrée.

Et assurez-vous de remplacer THE_NAME_OF_YOUR_ACTIVITY par le nom de votre activité.

+0

Qu'est-ce que: 'values.put (MediaStore.Audio.Media.IS_MUSIC, false);' for? – Macarse

+0

désolé, je l'ai mal écrit. Cela devrait être vrai. C'est juste dire que c'est un fichier de musique à jouer sur le lecteur de musique. – magicman

+0

@magicman: J'ai ajouté votre code mais 'onMediaScannerConnected' n'est jamais appelé. Des idées? – Macarse

Questions connexes