O_Casper_ne 2013-06-27 03:20 采纳率: 7.7%
浏览 2698

在 sdcard上扫描 media 文件再刷新

我使用下面的代码来获取图像文件路径和它的缩略图。

String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.ImageColumns.DATA};  
Cursor cursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media._ID); 
int count = cursor.getCount();
int image_column_index = cursor.getColumnIndex(MediaStore.Images.Media._ID);
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
int i;
for(i = 0; i < count; i++) {
cursor.moveToPosition(i);
int id = cursor.getInt(image_column_index);
String p = cursor.getString(image_path_index);
Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(), id, MediaStore.Images.Thumbnails.MICRO_KIND, null);
}

在文件修改后,我使用下面的代码来刷新数据库。

Intent scanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
scanIntent.setData(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath())));
sendBroadcast(scanIntent);

但是文件数量越多,花费时间越多。如何确认文件已经修改好了呢?

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-01 12:33
    关注

    您可以使用ContentObserver来监测MediaStore数据库中的变化。ContentObserver是一个抽象类,您需要重写它的onChange方法来处理数据变化。


    您可以使用以下代码来注册ContentObserver:

    ContentResolver resolver = getContentResolver();
    resolver.registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, new MyContentObserver(new Handler()));
    

    然后,您需要创建自己的ContentObserver类,它将继承ContentObserver类,并重写onChange方法。例如:

    class MyContentObserver extends ContentObserver
    {
        public MyContentObserver(Handler handler)
        {
            super(handler);
        }@
        Override
        public void onChange(boolean selfChange)
        {
            super.onChange(selfChange);
            // 数据变化时调用此方法
        }
    }
    

    在onChange方法中,您可以执行需要在数据变化时执行的操作。


    此外,您还可以使用MediaScannerConnection类来扫描新的或修改的文件。您可以使用以下代码来扫描文件:

    MediaScannerConnection.scanFile(this, new String[]
    {
        filePath
    }, null, new MediaScannerConnection.OnScanCompletedListener()
    {@
        Override
        public void onScanCompleted(String path, Uri uri)
        {
            // 扫描完成时调用此方法
        }
    });
    
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况