接入USB,通过监听系统数据库变化,每次变化,判断新增文件是否是视频文件,如果是视频文件则在recyclerView中显示出来,即使跳转到其他页面,回到本页面,会把所有变化的新增视频文件展示出来,java代码实现
时间: 2024-06-11 18:06:33 浏览: 11
首先,我们需要在AndroidManifest.xml文件中添加文件读写权限:
```
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
接着,我们需要创建一个广播接收器来监听系统数据库变化:
```
public class MediaReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
// 扫描完成,可以开始获取媒体文件
List<MediaFile> mediaFiles = getMediaFiles(context);
// 将媒体文件展示在RecyclerView中
updateRecyclerView(mediaFiles);
}
}
private List<MediaFile> getMediaFiles(Context context) {
List<MediaFile> mediaFiles = new ArrayList<>();
ContentResolver contentResolver = context.getContentResolver();
// 查询媒体库中的视频文件
Cursor cursor = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media._ID));
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE));
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DURATION));
long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));
String mimeType = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.MIME_TYPE));
// 判断文件是否存在
File file = new File(path);
if (file.exists()) {
// 将媒体文件添加到列表中
MediaFile mediaFile = new MediaFile(id, title, path, duration, size, mimeType);
mediaFiles.add(mediaFile);
}
}
cursor.close();
}
return mediaFiles;
}
private void updateRecyclerView(List<MediaFile> mediaFiles) {
// 更新RecyclerView中的数据
// ...
}
}
```
接下来,在Activity中注册广播接收器:
```
private MediaReceiver mediaReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册广播接收器
mediaReceiver = new MediaReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
registerReceiver(mediaReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 注销广播接收器
unregisterReceiver(mediaReceiver);
}
```
最后,在RecyclerView的Adapter中更新数据:
```
public class MediaAdapter extends RecyclerView.Adapter<MediaAdapter.ViewHolder> {
private List<MediaFile> mediaFiles;
public MediaAdapter(List<MediaFile> mediaFiles) {
this.mediaFiles = mediaFiles;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_media, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
MediaFile mediaFile = mediaFiles.get(position);
holder.titleTextView.setText(mediaFile.getTitle());
holder.durationTextView.setText(formatDuration(mediaFile.getDuration()));
}
@Override
public int getItemCount() {
return mediaFiles.size();
}
public void updateData(List<MediaFile> mediaFiles) {
this.mediaFiles = mediaFiles;
notifyDataSetChanged();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView titleTextView;
private TextView durationTextView;
public ViewHolder(View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.titleTextView);
durationTextView = itemView.findViewById(R.id.durationTextView);
}
}
private String formatDuration(long duration) {
long minutes = TimeUnit.MILLISECONDS.toMinutes(duration);
long seconds = TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(minutes);
return String.format(Locale.getDefault(), "%d:%02d", minutes, seconds);
}
}
```
这样,每次新增视频文件时,广播接收器会接收到系统数据库变化的通知,然后获取新增的媒体文件并展示在RecyclerView中。如果跳转到其他页面再回来,也会重新获取媒体文件并展示在RecyclerView中。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)