`
bogongjie
  • 浏览: 235076 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

保存图片到SD卡,但是Gallery中不能及时显示的问题

阅读更多

通过 Intent.ACTION_MEDIA_MOUNTED 进行整个SD卡扫描:

public void sdScan(){     
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" 
                    + Environment.getExternalStorageDirectory())));     
    }

 The method is restricted for only system apps from 4.4.

here is the another solution..pass the path of the image you have deleted or added and if the image is deleted pass true or if added then pass false.

   /**
 * Scanning the file in the Gallery database
 * 
 * @param path
 * @param isDelete
 */
private void scanFile(String path, final boolean isDelete) {
    try {
        MediaScannerConnection.scanFile(context, new String[] { path },
                null, new MediaScannerConnection.OnScanCompletedListener() {
                    public void onScanCompleted(String path, Uri uri) {
                        if (isDelete) {
                            if (uri != null) {
                                context.getContentResolver().delete(uri,
                                        null, null);
                            }
                        }
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }

}

 

 

 通过 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 扫描某个文件:

 public void fileScan(String filePath){     
        Uri data = Uri.parse("file://"+filePath);     
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));     
    }

 

从mediaStore中删除。

public static void deleteFileFromMediaStore(final ContentResolver contentResolver, final File file) {
    String canonicalPath;
    try {
        canonicalPath = file.getCanonicalPath();
    } catch (IOException e) {
        canonicalPath = file.getAbsolutePath();
    }
    final Uri uri = MediaStore.Files.getContentUri("external");
    final int result = contentResolver.delete(uri,
            MediaStore.Files.FileColumns.DATA + "=?", new String[] {canonicalPath});
    if (result == 0) {
        final String absolutePath = file.getAbsolutePath();
        if (!absolutePath.equals(canonicalPath)) {
            contentResolver.delete(uri,
                    MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});
        }
    }
}

 

You can use following technique to update all files present in a single folder:

for (File child : fileFolder.listFiles()) {
    if (child.isFile()) {
        fName = child.getName();
        Log.d("MyTag", "Scanning >> " + child.getName());

    MediaScannerConnection
        .scanFile( MyActivity.this,
        new String[] { "path/of/our/folder" + fName },
        null,  new MediaScannerConnection.OnScanCompletedListener() {
              public void onScanCompleted(
              String path, Uri uri) {
                 Log.i("ExternalStorage",  "Scanned " + path + ":");
                 Log.i("ExternalStorage",  "-> uri=" + uri);
              }
        });
    }
}

  

删除image并且更新Media

// Set up the projection (we only need the ID)
String[] projection = { MediaStore.Images.Media._ID };

// Match on the file path
String selection = MediaStore.Images.Media.DATA + " = ?";
String[] selectionArgs = new String[] { file.getAbsolutePath() };

// Query for the ID of the media matching the file path
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver contentResolver = getContentResolver();
Cursor c = contentResolver.query(queryUri, projection, selection, selectionArgs, null);
if (c.moveToFirst()) {
    // We found the ID. Deleting the item via the content provider will also remove the file
    long id = c.getLong(c.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
    Uri deleteUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
    contentResolver.delete(deleteUri, null, null);
} else {
    // File not found in media store DB
}
c.close();

 

手动刷新:

public void getAllUri() {
		Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,
				MediaStore.Images.Media.DEFAULT_SORT_ORDER);
		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			String data = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
			File file = new File(data);
			scanFile(file);
			cursor.moveToNext();
		}
		
		Cursor cursor2 = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);
		cursor2.moveToFirst();
		while(!cursor2.isAfterLast()){
			String path = cursor2.getString(cursor2.getColumnIndex(MediaStore.MediaColumns.DATA));
			File file = new File(path);
			scanFile(file);
			cursor2.moveToNext();
		}
	}

	private void scanFile(File file) {
		MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() {
			@Override
			public void onScanCompleted(String path, Uri uri) {
				Log.i("ExternalStorage", "Scanned " + path + ":");
				Log.i("ExternalStorage", "-> uri=" + uri);
			}
		});
	}

 

 

 

转载:http://hxsdit.com/1647

 http://blog.csdn.net/happy08god/article/details/9303715

分享到:
评论

相关推荐

    图片保存到sd卡

    标题“图片保存到SD卡”涉及的是Android平台上关于图片存储的知识点。在Android系统中,开发者经常需要处理图片的保存和读取,特别是在用户需要保存应用内生成的图片或者下载的图片时。以下是对这个主题的详细解释:...

    批量下载网络图片并且保存到SD卡后显示viewpage

    在Android应用开发中,批量下载网络图片并保存到SD卡是一项常见的需求,特别是在构建图片浏览类应用时。本文将详细讲解如何实现这一功能,并展示如何将下载的图片以ViewPager的形式展示给用户。 首先,我们需要理解...

    异步下载图片保存到sd卡

    在Android开发中,异步下载图片并保存到SD卡是一个常见的需求,特别是在构建涉及大量图像显示的应用时。这个过程涉及到网络请求、线程管理、内存和磁盘缓存策略等多个技术点。以下是对这个主题的详细阐述: 1. **...

    下载图片并保存到SD卡中

    标题中的“下载图片并保存到SD卡中”指的是在Android平台上,从网络上获取图片资源并将其存储到设备的外部存储(通常称为SD卡)的过程。这个过程涉及到网络请求、文件操作以及Android权限管理等技术。 首先,我们...

    zynq修改uboot环境变量保存到sd卡.docx

    在EBAZ4205开发板上,系统通过SD卡启动,因此,将U-Boot的环境变量保存到SD卡是至关重要的,以确保每次系统启动时能保持相同的配置。本文将详细介绍如何修改U-Boot以实现这一功能。 首先,我们需要一个支持将环境...

    stm32读取SD卡中图片,并在TFT中显示

    在本项目中,我们将探讨如何利用STM32读取SD卡中的图片,并将其显示在TFT(Thin Film Transistor)液晶显示屏上。这个过程涉及到FAT文件系统、SD卡驱动、图片解码以及TFT显示驱动等多个技术环节。 首先,我们需要在...

    STM32显示SD卡图片

    在STM32中,我们需要将ZnFat库集成到项目中,并配置相应的存储设备(这里是SD卡)。 4. BMP图像格式:BMP是一种常见的位图图像格式,包含图像的宽度、高度、色彩位深等信息,以及像素数据。解析BMP文件时,首先读取...

    STM32F407+ESP8266图片传输并保存至SD卡

    在这个项目中,STM32F407微控制器(MCU)与ESP8266 Wi-Fi模块协同工作,实现了图片的无线传输并将其保存至SD卡。下面我们将详细探讨这一技术实现的关键知识点。 首先,**STM32F407**是意法半导体的一款高性能、低...

    绘制手势并保存图片到SD卡

    本文将详细讲解如何在Android应用中实现手势绘制并将其保存到SD卡上,同时涉及到了UI控件的使用。 首先,我们需要理解Android中的手势识别机制。Android提供了GestureDetector类,用于识别基本的手势,如滑动、点击...

    Gallery从SD卡中获取图片,并显示.zip

    这个压缩包文件名“Gallery从SD卡中获取图片,并显示.zip”暗示了它包含了一个示例项目,展示了如何从外部存储(如SD卡)读取图片并将其在自定义的Gallery视图中显示。以下将详细讲解这个过程涉及的关键知识点: 1....

    GD32-读取SD卡图片显示实验_串口屏_国产ARMGD32F103_GD32_电子相册_

    在本实验中,我们将探讨如何在基于GD32F103微控制器的系统上创建一个功能完备的电子相册,利用串口屏显示SD卡中的图片。GD32F103是一款由国内厂商开发的高性能、低成本的32位微控制器,广泛应用于嵌入式系统设计。这...

    Gallery从SD卡中获取图片,并显示.rar

    这个压缩包文件"Gallery从SD卡中获取图片,并显示.rar"显然包含了关于如何从外部存储(如SD卡)读取图片并使用Gallery组件显示的教程或代码示例。下面,我们将详细探讨这个主题。 首先,Android系统允许应用程序...

    拍照并保存到SDCard

    具体功能:将拍摄的照片保存到SDcard中 具体需求: 1.图片名保存格式:图片名称_手机型号_随机4位数.jpg 2.将图片分解,压缩,显示 3.写入SDCard卡保存 具体实现: 1.定义布局文件 2.编写业务代码

    Android相机、相册获取图片显示并保存到SD卡

    以上就是Android应用中相机、相册获取图片并保存到SD卡的核心技术点。通过理解和实践这些知识点,开发者可以创建出功能完善的图片拍摄和管理功能。在实际开发中,还需要注意性能优化、用户体验以及隐私政策等方面的...

    Android应用源码Gallery从SD卡中获取图片,并显示.zip

    本项目源码主要涉及的是如何从SD卡(外部存储)中读取图片并使用Gallery组件进行显示。以下是这个项目的关键知识点: 1. **Android权限管理**: 在Android中,访问SD卡需要在`AndroidManifest.xml`文件中声明`READ...

    异步显示网络图片,并将图片保存到sd卡

    异步将网络图片显示,显示之后,将其复制到sd卡, 复制网络图片的原理是 将drawable 转为byte 数组 再用 FileOutputStream fos fos.write(myByte); 写如sd卡 复制好的图片目录是 sd/tese/a.jpg

    下载图片保存到SD卡上

    根据提供的文件信息,本文将详细解释如何在Android应用中使用Java语言下载图片并保存到SD卡上。这一过程包括了网络请求、图片处理以及文件存储等环节。 ### 一、项目背景与概述 #### 1. 项目目标 该项目旨在通过...

    应用源码Gallery从SD卡中获取图片,并显示.zip

    在Android开发中,"应用源码Gallery从SD卡中获取图片,并显示.zip"是一个典型的应用场景,涉及到用户界面(UI)设计、文件系统操作以及图片显示技术。以下将详细阐述相关知识点: 1. 图片选择器(Gallery): 在...

Global site tag (gtag.js) - Google Analytics