I Used MediaStore to scan and display media files from my storage using below code
private void displayAllVideos() {
Uri uri;
Cursor cursor;
VideoAdapter videoAdapter;
int column_index_data,thum;
String absolutePathThumb;
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Video.Media.BUCKET_DISPLAY_NAME, MediaStore.Video.Media._ID,MediaStore.Video.Thumbnails.DATA};
final String orderBy = MediaStore.Video.Media.DATE_ADDED + " DESC";
cursor = getApplicationContext().getContentResolver().query(uri,projection,null,null,orderBy);
column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
thum = cursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA);
while (cursor.moveToNext()){
Log.d("VIDEO", cursor.getString(0));
absolutePathThumb = cursor.getString(column_index_data);
Uri thumbUri = Uri.fromFile(new File(absolutePathThumb));
//String cursorThumb = cursor.getString(thum);
String fileName = FilenameUtils.getBaseName(absolutePathThumb);
String extension = FilenameUtils.getExtension(absolutePathThumb);
String duration = getDuration(absolutePathThumb);
VideoModel videoModel = new VideoModel();
videoModel.setDuration(duration);
videoModel.setVideo_uri(thumbUri.toString());
videoModel.setVideo_path(absolutePathThumb);
videoModel.setVideo_name(fileName);
videoModel.setVideo_thumb(cursor.getString(thum));
if (extension!=null){
videoModel.setVideo_extension(extension);
}else {
videoModel.setVideo_extension("mp4");
}
if (duration!=null){
videoModel.setDuration(duration);
}else {
videoModel.setDuration("00:00");
}
arrayListVideos.add(videoModel);
}
with above code i can able to get and display video file, Is there anything i need to improve in my code.
Your help in need thanks in advance.android
1 Answer 1
There are no big issues with your method, but I noticed something that can be improved:
Variable declaration
In Java is not common to declare the variables at the beginning of the method:
Uri uri;
Cursor cursor;
VideoAdapter videoAdapter;
int column_index_data,thum;
String absolutePathThumb;
Declare and initialize variables in the same place, it's easier to read and maintain.
By the way, videoAdapter
is declared but never used, that's another reason why you should avoid doing this.
Query results not used
Here you configure the projection:
String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Video.Media.BUCKET_DISPLAY_NAME, MediaStore.Video.Media._ID,MediaStore.Video.Thumbnails.DATA};
But after the query you never use the results for MediaStore.Video.Media.BUCKET_DISPLAY_NAME
and MediaStore.Video.Media._ID
.
Close the resources
The Cursor
object which is returned from the query is a resouce that needs to be closed:
cursor = getApplicationContext().getContentResolver().query(uri,projection,null,null,orderBy);
To close it automatically use the try-with-resources
statement:
try (Cursor cursor = getApplicationContext().getContentResolver().query(uri,projection,null,null,orderBy)) {
// ...
}
Camelcase instead of underscore
From the Java Naming Convention:
Methods should be verbs, in mixed case with the first letter lowercase, with the first letter of each internal word capitalized.
So instead of videoModel.setVideo_uri()
use videoModel.setVideoUri()
or even better videoModel.setUri()
. Similarly for the other methods.
Duplicated assignment
videoModel.setDuration(duration)
is called three times. Compute the value of duration
first and add it to videoModel
only once.
Ternary operator instead of if-else
Sometime using the ternary operator is better for readability. For example instead of:
if (extension!=null){
videoModel.setVideo_extension(extension);
}else {
videoModel.setVideo_extension("mp4");
}
You can get the same result with:
String extension = extension != null ? extension : "mp4";
videoModel.setVideo_extension(extension);
Documentation
In the link you posted there is an example that is very similar to your use case. Most of my suggestions are already mentioned there, read it carefully.
-
\$\begingroup\$ hi, i was not able to retrieve some video files ?. any help \$\endgroup\$sanoj lawrence– sanoj lawrence2020年09月22日 02:59:05 +00:00Commented Sep 22, 2020 at 2:59