2016-09-06 2 views
6

Je suis en train d'obtenir tout le nom de fichier ayant des fichiers audio dans ce que je l'ai utilisé Mediastore pour obtenir le Mediastore audio, album, playlist et DATA audio aussi mais comment puis-je obtenir le fichier ou le dossier contenant le fichier audio? Voici le code que j'ai essayé mais ce n'est pas correct car je ne suis pas capable de définir le External_Content_uri. C'est le code que j'ai essayé.Comment obtenir des données de MediaStore.File et MediaStore.File.FileColumn

private void External() { 
    try { 
     String[] proj = {MediaStore.Files.FileColumns.TITLE, 
       MediaStore.Files.FileColumns._ID, 
       MediaStore.Files.FileColumns.PARENT, 
       MediaStore.Files.FileColumns.DATA 
     };// Can include more data for more details and check it. 

     String selection =MediaStore.Files.FileColumns.MEDIA_TYPE+"=?"; 

     String[] selectionArgs = {"MediaStore.Files.FileColumns.MEDIA_TYPE_AUDIO"}; 

     String sortOrder = MediaStore.Audio.Media.TITLE + " ASC"; 

     Cursor audioCursor = getContentResolver().query(MediaStore.Files.getContentUri("\"external\""), proj, selection, selectionArgs, sortOrder); 

     if (audioCursor != null) { 
      if (audioCursor.moveToFirst()) { 
       do { 
        int filetitle = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE); 
        int file_id = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID); 
        int fileparent = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.PARENT); 
        int filedata = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA); 
        Mediafileinfo info = new Mediafileinfo(); 
        info.setData(new File(new File(audioCursor.getString(filedata)).getParent()).getName()); 
        info.setTitle(audioCursor.getString(filetitle)); 
        info.set_id(audioCursor.getString(file_id)); 
        info.setParent(audioCursor.getString(fileparent)); 
        // info.setData(audioCursor.getString(filedata)); 
        audioList.add(info); 
       } while (audioCursor.moveToNext()); 
      } 
     } 
     assert audioCursor != null; 
     audioCursor.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

J'ai essayé this et this exemple, mais je ne suis pas en mesure d'obtenir la solution.

Répondre

1

Ecrire une nouvelle réponse, puisque tout ce que vous voulez est le nom du dossier des fichiers audio. La meilleure chose à utiliser ici est MediaStore.Audio.Media au lieu d'utiliser MediaStore.File. Obtenez les noms de dossier en utilisant le ci-dessous sur le chemin du fichier audio.

new File(new File(audioCursor.getString(filedata)).getParent()).getName() 

private void External() { 
try { 
    Uri externalUri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

    projection=new String[]{MediaStore.Audio.Media._ID, 
      MediaStore.Audio.Media.TITLE, 
      MediaStore.Audio.Media.DATA,; 

    String selection =null; 

    String[] selectionArgs = null; 

    String sortOrder = MediaStore.Audio.Media.TITLE + " ASC"; 

    Cursor audioCursor = getContentResolver().query(externalUri, proj, selection, selectionArgs, sortOrder); 

    if (audioCursor != null) { 
     if (audioCursor.moveToFirst()) { 
      do { 
       int filetitle = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
       int file_id = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID); 
       int filePath = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
       Mediafileinfo info = new Mediafileinfo(); 
       info.setData(new File(new File(audioCursor.getString(filedata)).getParent()).getName()); 
       info.setTitle(audioCursor.getString(filetitle)); 
       info.set_id(audioCursor.getString(file_id)); 
       audioList.add(info); 
      } while (audioCursor.moveToNext()); 
     } 
    } 
    assert audioCursor != null; 
    audioCursor.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 
+0

Bro je suis capable d'obtenir tous les chose dans la section MediaStore.Audio mais je veux MediaStore.Files –

+0

vous voulez des noms de fichiers de tous les fichiers de musique, a obtenu cela. Avez-vous essayé le remplacement de la valeur de la colonne avec le nom de la colonne comme mentionné dans la réponse? –

+0

Je veux obtenir le nom du dossier qui contient les fichiers multimédia –

-1

fichier multimédia Salut de requête comme audio, images et vidéo à l'aide Android Media Store et contenu Android résolveur, consultez ce tutoriel
http://www.androiddevelopersolutions.com/2015/12/android-media-store-tutorial-list-all.html

pour une offre Toutes les images:

private void parseAllImages() { 
    try { 
     String[] projection = {MediaStore.Images.Media.DATA}; 
     cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       projection, // Which columns to return 
       null,  // Return all rows 
       null, 
       null); 


     int size = cursor.getCount(); 

     /******* If size is 0, there are no images on the SD Card. *****/ 

     if (size == 0) { 

     } else { 

      int thumbID = 0; 
      while (cursor.moveToNext()) { 

       int file_ColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 

       /**************** Captured image details ************/ 

       /***** Used to show image on view in LoadImagesFromSDCard class ******/ 
       String path = cursor.getString(file_ColumnIndex); 

       String fileName = path.substring(path.lastIndexOf("/") + 1, path.length()); 

       MediaFileInfo mediaFileInfo = new MediaFileInfo(); 
       mediaFileInfo.setFilePath(path); 
       mediaFileInfo.setFileName(fileName); 
       mediaFileInfo.setFileType(type); 
       mediaList.add(mediaFileInfo); 
      } 
     } 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

}

Pour Listing tous Vidéo (.mp4)

private void parseAllVideo() { 
    try { 
     String name = null; 
     String[] thumbColumns = {MediaStore.Video.Thumbnails.DATA, 
       MediaStore.Video.Thumbnails.VIDEO_ID}; 

     int video_column_index; 
     String[] proj = {MediaStore.Video.Media._ID, 
       MediaStore.Video.Media.DATA, 
       MediaStore.Video.Media.DISPLAY_NAME, 
       MediaStore.Video.Media.SIZE}; 
     Cursor videocursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 
       proj, null, null, null); 
     int count = videocursor.getCount(); 
     Log.d("No of video", "" + count); 
     for (int i = 0; i < count; i++) { 
      MediaFileInfo mediaFileInfo = new MediaFileInfo(); 
      video_column_index = videocursor 
        .getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME); 
      videocursor.moveToPosition(i); 
      name = videocursor.getString(video_column_index); 

      mediaFileInfo.setFileName(name); 

      int column_index = videocursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      videocursor.moveToPosition(i); 
      String filepath = videocursor.getString(column_index); 

      mediaFileInfo.setFilePath(filepath); 
      mediaFileInfo.setFileType(type); 
      mediaList.add(mediaFileInfo); 
      // id += " Size(KB):" + 
      // videocursor.getString(video_column_index); 


     } 
     videocursor.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

}

pour une offre de All Audio

private void parseAllAudio() { 
    try { 
     String TAG = "Audio"; 
     Cursor cur = getContentResolver().query(
       MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, 
       null); 

     if (cur == null) { 
      // Query failed... 
      Log.e(TAG, "Failed to retrieve music: cursor is null :-("); 

     } 
     else if (!cur.moveToFirst()) { 
      // Nothing to query. There is no music on the device. How boring. 
      Log.e(TAG, "Failed to move cursor to first row (no query results)."); 

     }else { 
      Log.i(TAG, "Listing..."); 
      // retrieve the indices of the columns where the ID, title, etc. of the song are 

      // add each song to mItems 
      do { 
       int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST); 
       int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE); 
       int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM); 
       int durationColumn = cur.getColumnIndex(MediaStore.Audio.Media.DURATION); 
       int idColumn = cur.getColumnIndex(MediaStore.Audio.Media._ID); 
       int filePathIndex = cur.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
       Log.i(TAG, "Title column index: " + String.valueOf(titleColumn)); 
       Log.i(TAG, "ID column index: " + String.valueOf(titleColumn)); 

       Log.i("Final ", "ID: " + cur.getString(idColumn) + " Title: " + cur.getString(titleColumn) + "Path: " + cur.getString(filePathIndex)); 
       MediaFileInfo audio = new MediaFileInfo(); 
       audio.setFileName(cur.getString(titleColumn)); 
       audio.setFilePath(cur.getString(filePathIndex)); 
       audio.setFileType(type); 
       mediaList.add(audio); 

      } while (cur.moveToNext()); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

}

+0

Je suis en mesure de pouvoir obtenir toutes les thx de données à votre message je pense que l'application pour obtenir tous les types de données, mais ici je veux utiliser Mediastore.file –

+1

Je suis en mesure d'obtenir toutes les choses que vous mettez dans votre réponse je veux obtenir les fichiers avec les médias sur ce pas le Audio.Data –

+0

pouvez-vous me dire comment je peux utiliser le Mediastore.Files ou où je fais mal –