Cómo obtener datos de MediaStore.File y MediaStore.File.FileColumn
Estoy tratando de obtener todo el nombre de archivo con archivos de audio en él He utilizado Mediastore para obtener el mediastore de audio, álbum, lista de reproducción y audio DATA también, pero ¿cómo puedo obtener el archivo o títulos de la carpeta que contiene el archivo de audio. Código que he intentado pero no es correcto ya que no puedo establecer el External_Content_uri. Este es el código que he probado.
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(); } }
He intentado este y este ejemplo, pero no soy capaz de obtener la solución.
- ¿Cuál es la diferencia entre el título y el nombre para mostrar
- Inserción de un vídeo en MediaStore
- cómo obtener todos los archivos de audio de la tarjeta sd Android
- La miniatura no se actualiza inmediatamente
- ¿Cuál es la mejor manera de elegir un video en Android?
- ¿Cómo puedo actualizar MediaStore en Android?
- Interno u externo uri en la obtención de datos de mediastore
- Cuando toma la foto get - java.lang.Throwable: file: // Uri expuesto a través de ClipData.Item.getUri ()
- MediaStore.Images.Thumbnails.getThumbnail devuelve una miniatura incorrecta en lugar de NULL
- Establecer recurso sin formato como tono de llamada en Android
- Mostrar imagen grande de la tarjeta SD en Android
- Error de cursor Android: "asegúrese de que el cursor se inicialice correctamente antes de acceder a los datos de él ..."
- Android: cómo obtener una miniatura de vídeo de un archivo privado para su aplicación?
Escribir una nueva respuesta, ya que lo único que quieres es los nombres de las carpetas de los archivos de audio.
Así que lo mejor de usar aquí es MediaStore.Audio.Media
lugar de usar MediaStore.File
. Obtenga los nombres de las carpetas usando el siguiente en la ruta del archivo de 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(); } }
Hola archivo de medios de consulta como audio, imágenes y video usando Android Media Store y Android Content Resolver, compruebe este tutorial
http://www.androiddevelopersolutions.com/2015/12/android-media-store-tutorial-list-all.html
Todas las imágenes:
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(); }
}
Para Listar todo el video (.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(); }
}
Para Listar Todo el 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(); }
}
- ¿Cómo obligar a una página web a ser siempre prestados con una relación de píxeles de 1,0 (no 1,5) en iPhones y Androids?
- Descarga de archivos en un navegador Android 3.0 desde mi sitio ASP.NET