拍照后扫描媒体更新,ACTION_MEDIA_SCANNER_SCAN_FILE无效

7号南孚电池 2013-10-31 09:58:59
最近在做个相机功能。把照片保存到系统相册之后。利用sendBroadcast去通知ACTION_MEDIA_SCANNER_SCAN_FILE总是无效。
代码如下:

String url=MediaStore.Images.Media.insertImage(getContentResolver(), picture, "", "");
Uri uri= Uri.parse(url);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));

发现总是没有更新系统相册!
设备是HTC G18,求大家指点下
...全文
6636 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nod22 2016-06-20
  • 打赏
  • 举报
回复
这个得换下思路 MediaScannerConnection.scanFile 这个方法扫描的是一个 url 文件具体的存储路径,而MediaStore.Images.Media.insertImage这个方法返回的是一个uri,那么我们要想在插入系统相册后扫描就需要将uri转换成url ,代码如下 if (resultCode == RESULT_OK) { Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 String fileNameUri = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", ""); Log.d("StorageActivity", "married is " + fileNameUri); //sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse(fileName.replace("content","file")))); //sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); String[] proj = { MediaStore.Images.Media.DATA }; Cursor actualimagecursor = this.managedQuery(Uri.parse(fileNameUri),proj,null,null,null); int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); actualimagecursor.moveToFirst(); String img_path = actualimagecursor.getString(actual_image_column_index); Log.d("StorageActivity", "married is " + img_path); MediaScannerConnection.scanFile(this, new String[]{ img_path}, null, null); picture.setImageBitmap(bitmap); }
zwb1999 2016-05-10
  • 打赏
  • 举报
回复
[b][b]我是把已经存在的相册插入相册然后再刷新的,所以没有拍照这个过程,没法用你这个方法,但是我在打开相册的时候有对应的onactivityResult()方法,但是我放进去依然刷新不了相册,用的是华为的神机,我目前就发现这又华为的机子有这种问题。
zwb1999 2016-05-10
  • 打赏
  • 举报
回复
是把图片插入相册,打错了
yangyu5646 2016-01-26
  • 打赏
  • 举报
回复
引用 7 楼 LeiGang1991 的回复:
我使用sendBroadcast和MediaScannerConnection.scanFile刷新相册,在4.0的模拟器上可以,当我把它下载到4.4的开发板上时发现无法刷新,打开sd卡,目录也没有图片,但是重启开发板后,打开相册能够发现图片,有大神知道是怎么回事么?
不知道这个问题你解决了吗? 我也在部分机型遇到这个问题,求指教
星秋乘风 2016-01-26
  • 打赏
  • 举报
回复
我是这样做的,因为当时在Android中调用完相机拍照之后,系统会调用onActivityResult函数,将sendBroadcast写在onActivityResult中就可以了。
加哥 2015-12-16
  • 打赏
  • 举报
回复
引用 7 楼 LeiGang1991 的回复:
我使用sendBroadcast和MediaScannerConnection.scanFile刷新相册,在4.0的模拟器上可以,当我把它下载到4.4的开发板上时发现无法刷新,打开sd卡,目录也没有图片,但是重启开发板后,打开相册能够发现图片,有大神知道是怎么回事么?
重启之后MediaProvider会重新扫描更新数据库,所以即使你不手动发广播也是可以在重启后的照片里面靠到全部图片。
星秋乘风 2015-11-09
  • 打赏
  • 举报
回复
我使用sendBroadcast和MediaScannerConnection.scanFile刷新相册,在4.0的模拟器上可以,当我把它下载到4.4的开发板上时发现无法刷新,打开sd卡,目录也没有图片,但是重启开发板后,打开相册能够发现图片,有大神知道是怎么回事么?
老江 2015-09-14
  • 打赏
  • 举报
回复
引用 5 楼 zgjxxjk 的回复:
不知道博主已经解决了没,可否分享一下!
我试过了 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file))); 确实只是会扫描某个文件
  • 打赏
  • 举报
回复
不知道博主已经解决了没,可否分享一下!
yangtaoxiantao 2013-11-12
  • 打赏
  • 举报
回复
注意:Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,是只扫描文件的,不会扫描文件夹的,得你自己查找指定文件 private void scanSdCard(){ String file= Environment.getExternalStorageDirectory().getAbsolutePath()+"/Photo"; folderScan(file); } private void fileScan(String file){ sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file))); } private void folderScan(String path){ File file = new File(path); if(file.exists() && file.isDirectory()){ File[] array = file.listFiles(); for(int i=0;i<array.length;i++){ File f = array[i]; if(f.isFile()){//FILE TYPE String name = f.getName(); if(name.endsWith(".mp4") || name.endsWith(".mp3") || name.endsWith(".jpg")){ fileScan(f.getAbsolutePath()); } } else {//FOLDER TYPE folderScan(f.getAbsolutePath()); } } } }
Simple魏 2013-11-01
  • 打赏
  • 举报
回复
Uri data = Uri.parse("file://" +"这里是图片路径"); sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
happyLife002 2013-11-01
  • 打赏
  • 举报
回复
试试这个,应该好使
 // Tell the media scanner about the new file so that it is
            // immediately available to the user.
            MediaScannerConnection.scanFile(this,
                    new String[] { file.toString() }, null,
                    new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                }
            });
祝你成功!

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧