一、保存外部存储需要申请权限
二、外部存储使用案例(保存,读取,删除图片)
一、 保存外部存储需要申请权限
Android
设备支持外部存储,比如SD
卡等,保存在外部存储的数据具有全局可读性,可供在其他设备比如电脑上阅读,修改等。使用外部存储需要获取外部存储的访问权限
。
这个很重要,不然无法操作SD
卡,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
二、外部存储使用案例(保存,读取,删除图片)
1. 实现效果
外部存储保存图片的方法
2. 判断是否挂载 SD 卡方法
/**
* 1.判断SD卡是否挂载
* **/
public static boolean isMounted() {
String state = Environment.getExternalStorageState();
return state.equals(Environment.MEDIA_MOUNTED);
}
SD 保存图片,删除图片、显示图片的方法
3. 保存图片到SD卡
保存图片到SD卡 实现代码如下:
// 保存图片的方法
public void BtnSaveImage(View view) {
// 获取图片类型 bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 将bitmap 压缩成byte类型 并保存到outputstream中
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
bitmap.recycle();
boolean saveimg = SaveImg(getApplicationContext(), "photo.png",
baos.toByteArray());
if (saveimg) {
Toast.makeText(getApplicationContext(), "保存成功" + store_path,
Toast.LENGTH_SHORT).show();
}
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 保存图片的方法
public static boolean SaveImg(Context context, String filename, byte[] data) {
// 判断是否挂载SD卡
if (!isMounted()) {
Toast.makeText(context, "SD卡未安装", Toast.LENGTH_SHORT).show();
return false;
}
File dir = new File(store_path);
// 创建文件目录
if (!dir.exists()) {
dir.mkdirs();
}
try {
// 向文件目录 dir中写文件filename
FileOutputStream fos = new FileOutputStream(new File(dir, filename));
fos.write(data);
fos.close();
return true;
} catch (IOException e) {
e.printStackTrace();
Log.i("TAG", "IOException..." + e);
return false;
}
}
4. 删除图片的方法
删除图片 代码实现代码实现如下:
public void BtnDeleteImage(View view) {
DeletleImg(getApplicationContext(), "photo.png");
}
// 删除图片
public static void DeletleImg(Context context, String filename) {
File dirfile = new File(store_path + filename);
// 判断文件是否存在
if (!dirfile.exists()) {
Toast.makeText(context, "文件不存在", Toast.LENGTH_SHORT).show();
return;
}
if (dirfile.isDirectory()) {
String[] childdir = dirfile.list();
for (int i = 0; i < childdir.length; i++) {
new File(dirfile, childdir[i]).delete();
}
}
dirfile.delete();
}
5.读取显示图片的方法
读取显示图片代码实现如下:
// 读取图片
public void BtnReadImage(View view) {
Bitmap readImg = ReadImg(getApplicationContext(), "photo.png");
if (readImg == null) {
Toast.makeText(getApplicationContext(), "读取失败" + store_path,
Toast.LENGTH_SHORT).show();
} else {
((ImageView) findViewById(R.id.img_external))
.setImageBitmap(readImg);
}
}
// 读取图片
public static Bitmap ReadImg(Context context, String filename) {
// 判断是否挂载SD卡
if (!isMounted()) {
Toast.makeText(context, "SD卡未安装", Toast.LENGTH_SHORT).show();
return null;
}
// 获取文件路径下的文件名称
File imgFile = new File(store_path, filename);
if (imgFile.exists()) {
Log.i("TAG", "imgFile" + imgFile.getAbsolutePath());
// 将路径下的文件转换成 bitmap
return BitmapFactory.decodeFile(imgFile.getAbsolutePath());
} else {
Toast.makeText(context, "文件不存在", Toast.LENGTH_SHORT).show();
}
return null;
}
6. 布局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/img_external"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_external_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="BtnSaveImage"
android:text="保存图片到SD卡" />
<Button
android:id="@+id/btn_external_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="BtnDeleteImage"
android:text="删除SD卡 图片" />
<Button
android:id="@+id/btn_external_read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="BtnReadImage"
android:text="显示SD卡 图片" />
<span class="hljs-name"LinearLayout>
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Android
+关注
关注
12文章
3851浏览量
125642 -
数据
+关注
关注
8文章
6512浏览量
87609 -
SD卡
+关注
关注
2文章
530浏览量
63022
发布评论请先 登录
相关推荐
便携式高速大容量实时数据采集记录存储应用案例(SD卡存储)
小容量的Flash存储芯片,它们的一个共同特点是受寻址空间的限制,不能满足大容量存储的要求。大容量数据存储器采用SD卡(最大支持32G)实现
发表于 06-25 14:40
请问怎么将SD卡中存储的数据通过GPRS传输到电脑上显示?
,认为不能及时的将传感器实时采集的数据通过GPRS传输给电脑(因为GPRS数据传输所需要的时间大于传感器采集所需要的时间,害怕数据丢失),所以,我想到的方法是,让GPRS传输已经存储在SD卡
发表于 04-30 02:54
请问没有SD卡和外部flash如何显示汉字?
我设计硬件忘了设计SD卡和外部flash了,因为我需求的字不多不超过100个,请问有什么方法可以打点,显示汉字。我在网上没有搜到有关内容
发表于 03-16 00:40
AES参考设计的SD / MMC卡上的USB高速设备海量存储
采用AES参考设计的SD / MMC卡上的USB高速设备海量存储。该参考设计演示了基于AT32UC3A3的USB大容量存储设备,具有用于通信的高速USB和用于
发表于 07-21 13:15
单片机外部中断的基本使用方法
外部中断一、实验目的二、实验内容三、实验步骤四、C代码如下五、实验结果六、实验体会一、实验目的掌握单片机外部中断的基本使用方法了解单片机外部中断脉冲触发和电平触发的不同应用掌握
发表于 12-03 07:42
Rockchip怎样将SD卡启动或升级固件到本地存储呢
SD 卡对本地存储(如 eMMC,nand flash)固件的升级。SD 卡升级是可以脱离 PC 机或网络的一种固件升级
发表于 04-07 15:33
Rockchip使用SD卡启动或升级固件到本地存储
到 SD 卡内,制作不同的卡类型。普通 SD 卡与 PC 使用完全一样,可以在 U-Boot 和 Kernel 系统中作为普通的存储空间使用
发表于 04-22 17:17
如何使用USB大容量存储设备和通过SDIO连接的SD卡?
的 stm32f4-discovery 使用USB 大容量存储设备和通过 SDIO 连接的 SD 卡。它可以工作,但我的 stm32f4 在 USB 大容量存储需要时盲目地写入和读取
发表于 01-05 07:12
评论