通过 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); } }); }
相关推荐
标题“图片保存到SD卡”涉及的是Android平台上关于图片存储的知识点。在Android系统中,开发者经常需要处理图片的保存和读取,特别是在用户需要保存应用内生成的图片或者下载的图片时。以下是对这个主题的详细解释:...
在Android应用开发中,批量下载网络图片并保存到SD卡是一项常见的需求,特别是在构建图片浏览类应用时。本文将详细讲解如何实现这一功能,并展示如何将下载的图片以ViewPager的形式展示给用户。 首先,我们需要理解...
在Android开发中,异步下载图片并保存到SD卡是一个常见的需求,特别是在构建涉及大量图像显示的应用时。这个过程涉及到网络请求、线程管理、内存和磁盘缓存策略等多个技术点。以下是对这个主题的详细阐述: 1. **...
标题中的“下载图片并保存到SD卡中”指的是在Android平台上,从网络上获取图片资源并将其存储到设备的外部存储(通常称为SD卡)的过程。这个过程涉及到网络请求、文件操作以及Android权限管理等技术。 首先,我们...
在本项目中,我们将探讨如何利用STM32读取SD卡中的图片,并将其显示在TFT(Thin Film Transistor)液晶显示屏上。这个过程涉及到FAT文件系统、SD卡驱动、图片解码以及TFT显示驱动等多个技术环节。 首先,我们需要在...
在STM32中,我们需要将ZnFat库集成到项目中,并配置相应的存储设备(这里是SD卡)。 4. BMP图像格式:BMP是一种常见的位图图像格式,包含图像的宽度、高度、色彩位深等信息,以及像素数据。解析BMP文件时,首先读取...
在EBAZ4205开发板上,系统通过SD卡启动,因此,将U-Boot的环境变量保存到SD卡是至关重要的,以确保每次系统启动时能保持相同的配置。本文将详细介绍如何修改U-Boot以实现这一功能。 首先,我们需要一个支持将环境...
在这个项目中,STM32F407微控制器(MCU)与ESP8266 Wi-Fi模块协同工作,实现了图片的无线传输并将其保存至SD卡。下面我们将详细探讨这一技术实现的关键知识点。 首先,**STM32F407**是意法半导体的一款高性能、低...
本文将详细讲解如何在Android应用中实现手势绘制并将其保存到SD卡上,同时涉及到了UI控件的使用。 首先,我们需要理解Android中的手势识别机制。Android提供了GestureDetector类,用于识别基本的手势,如滑动、点击...
本项目为一款基于Android平台的Gallery应用,用户可从SD卡中检索并查看图片,同时支持.rar格式文件的预览。项目采用Kotlin语言编写,兼容Android Studio开发环境,方便开发者进行二次开发与定制。 **核心功能:** ...
这个压缩包文件名“Gallery从SD卡中获取图片,并显示.zip”暗示了它包含了一个示例项目,展示了如何从外部存储(如SD卡)读取图片并将其在自定义的Gallery视图中显示。以下将详细讲解这个过程涉及的关键知识点: 1....
在本实验中,我们将探讨如何在基于GD32F103微控制器的系统上创建一个功能完备的电子相册,利用串口屏显示SD卡中的图片。GD32F103是一款由国内厂商开发的高性能、低成本的32位微控制器,广泛应用于嵌入式系统设计。这...
这个压缩包文件"Gallery从SD卡中获取图片,并显示.rar"显然包含了关于如何从外部存储(如SD卡)读取图片并使用Gallery组件显示的教程或代码示例。下面,我们将详细探讨这个主题。 首先,Android系统允许应用程序...
以上就是Android应用中相机、相册获取图片并保存到SD卡的核心技术点。通过理解和实践这些知识点,开发者可以创建出功能完善的图片拍摄和管理功能。在实际开发中,还需要注意性能优化、用户体验以及隐私政策等方面的...
工程文件可能包含了STM32的配置文件(如STM32CubeMX生成的初始化代码)、FATFS的配置、SD卡、OLED、USB相关的驱动代码以及主循环中处理图片显示和USB事件的部分。 在实际操作中,开发者需要按照以下步骤进行: 1. ...
本项目源码主要涉及的是如何从SD卡(外部存储)中读取图片并使用Gallery组件进行显示。以下是这个项目的关键知识点: 1. **Android权限管理**: 在Android中,访问SD卡需要在`AndroidManifest.xml`文件中声明`READ...
具体功能:将拍摄的照片保存到SDcard中 具体需求: 1.图片名保存格式:图片名称_手机型号_随机4位数.jpg 2.将图片分解,压缩,显示 3.写入SDCard卡保存 具体实现: 1.定义布局文件 2.编写业务代码
异步将网络图片显示,显示之后,将其复制到sd卡, 复制网络图片的原理是 将drawable 转为byte 数组 再用 FileOutputStream fos fos.write(myByte); 写如sd卡 复制好的图片目录是 sd/tese/a.jpg