Android 外部存储使用详解
来源:互联网 发布:php mysql 参数化 编辑:程序博客网 时间:2024/05/29 18:05
Android 设备支持外部存储,比如SD卡等,保存在外部存储的数据具有全局可读性,可供在其他设备比如电脑上阅读,修改等。注意:使用外部存储需要获取外部存储的访问权限。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
通过本文章你将学习到如下知识点:
1. 保存外部存储需要申请权限2. 外部存储使用Demo(保存,读取,删除图片)
1. 保存外部存储需要申请权限
这个很重要,不然无法操作SD 卡,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 外部存储使用Demo(保存,读取,删除图片)
- 判断是否挂载SD 卡方法
/** * 1.判断SD卡是否挂载 * **/ public static boolean isMounted() { String state = Environment.getExternalStorageState(); return state.equals(Environment.MEDIA_MOUNTED); }
- 实现效果
- SD 保存图片,删除图片、显示图片的方法
public class FileExternalStorageMethods extends Activity { // 定义文件存储路径 getExternalStorageDirectory public static final String store_path = Environment .getExternalStorageDirectory() + File.separator + "filename" + File.separator + "images" + File.separator; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_externel_storage); } 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 void BtnDeleteImage(View view) { DeletleImg(getApplicationContext(), "photo.png"); } 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); } } /** * 1.判断SD卡是否挂载 * **/ public static boolean isMounted() { String state = Environment.getExternalStorageState(); return state.equals(Environment.MEDIA_MOUNTED); } // 保存图片的方法 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; } } // 读取图片 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; } // 删除图片 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(); }}
- 布局如下:
<?xml version="1.0" encoding="utf-8"?><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卡 图片" /></LinearLayout>
至此保存外部存储的例子完成。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
点击阅读原文,获取更多福利
阅读全文
0 0
- Android 外部存储使用详解
- Android开发中内存、内部存储、外部存储详解
- Android开发中内存、内部存储、外部存储详解
- Android 内部存储,外部存储使用范围和介绍
- android 外部存储知识
- android 实现外部存储
- android 外部存储卡
- Android外部存储
- android外部存储
- Android的外部存储
- Android外部存储的
- 《Android外部存储》
- Android 内部存储使用详解
- Android Studio——android中的文件操作详解以及内部存储和外部存储
- android中的文件操作详解以及内部存储和外部存储
- android中的文件操作详解以及内部存储和外部存储
- android中的文件操作详解以及内部存储和外部存储
- android中的文件操作详解以及内部存储和外部存储
- HTTP2.0有哪些提升?
- 双重检验锁与单例模式与volatitle
- 【每日一句shell】一句shell实现wordcount
- Git安装与基本用法
- 从零开始前端学习[24]:css的高级属性(继承,重用,组件化的开发过程)
- Android 外部存储使用详解
- oradebug命令使用说明
- [开发日志4]人物控制器修改和2D表现形式修改
- BZOJ 3709 Bohater 【贪心】
- 【问题记录】解决,打开app时,EditView的自动获得焦点,并且软键盘弹出
- 第四周 项目1 建立单链表
- 7-8 使用原子 和 子表结构 ,求广义表 的深度
- 51nod五级题小记
- volatile和synchronized的比较