Android 常见SD卡操作
Android 常见SD卡操作
参考
https://blog.csdn.net/mad1989/article/details/37568667.
【0.】 Environment 类SD卡相关方法
| Method | Description |
|---|---|
| getExternalStoragePublicDirectory(String type) | 获取指定类型的目录 |
| getExternalStorageState() | 获取SD卡的状态 |
| getExternalStorageDirectory() | 获取SD卡的根目录 |
| getExternalStorageState(File path) | 获取指定文件的状态 |
【1.】 检测SD卡是否可用
String sdCardState = Environment.getExternalStorageState();
if (sdCardState.equals(Environment.MEDIA_MOUNTED)) {
L.e("SD Card is available!");
} else {
L.e("SD Card is unavailable!");
}
【2.】 获取SD卡的空间
/**
* 获取SD卡的大小
*/
public void getSDCardSize(View view) {
File sdCard = Environment.getExternalStorageDirectory();
//获取SD卡的可用大小
//sdCard.getFreeSpace();
//getUsableSpace 要比getFreeSpace精确一些
long lFree = sdCard.getUsableSpace();
//获取SD开的总大小
long totalSize = sdCard.getTotalSpace();
//格式化,Formatter类,会自动地将大小转化为合适的单位
String total = android.text.format.Formatter.formatFileSize(this, totalSize);
String free = android.text.format.Formatter.formatFileSize(this, lFree);
L.e(MessageFormat.format("Sad Card Info 【Total Size】= {0} 【Free Size】={1}", total, free));
}
【3.】 SD卡的操作权限
在manifests 文件中加入SD权限
<!--写入SD卡权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
申请权限
private static final int WRITE_SD_CARD_REQUEST_CODE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sdcard);
int state = ActivityCompat.checkSelfPermission
(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (state != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
WRITE_SD_CARD_REQUEST_CODE);
}
}
//处理权限的申请结果
@Override
public void onRequestPermissionsResult
(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == WRITE_SD_CARD_REQUESTCODE) {
//如果拒绝了权限,结束Activity
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
this.finish();
} else {
L.e("具有权限");
}
}
}
【4.】绕过权限访问向SD卡中写入数据
有时候,我们需要向SD卡中存储一些缓存数据,但是这时候如果申请读写SD卡权限的话似乎也不太必要,那么你可通过下面的这个方法向SD卡中写入数据。
文件的存储路径为: storage/sdcard/Android/data/应用程序包名/cache/
/**
* 绕过权限先SD卡中写入数据
*/
public void writeCacheData(View view) throws IOException {
//获得SD卡中写入
//获取到本应用程序在SD卡中的的缓存目录
File cacheFileDir = this.getExternalCacheDir();
File file = new File(cacheFileDir, "temp.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write("Hello World!".getBytes("UTF-8"));
fileOutputStream.flush();
fileOutputStream.close();
//将刚刚写入的信息读取出来
File readFile = new File(cacheFileDir, "temp.txt");
FileInputStream fileInputStream = new FileInputStream(readFile);
StringBuilder builder = new StringBuilder();
int i;
while ((i = fileInputStream.read()) != -1)
builder.append((char) i);
L.e(builder.toString());
fileInputStream.close();
}
【5.】向SD卡中写入数据
众所周知SD卡下面有许多不同的目录用来放置不同的类型的文件,比如说Download目录 ,Movies目录 等等。
我们可以通过Environment.getExternalStoragePublicDirectory(String type) 方法来获得不同的目录。
常见值如下:
| Value | Description |
|---|---|
| DIRECTORY_MUSIC | 音乐目录 |
| DIRECTORY_RINGTONES | 铃声 |
| DIRECTORY_ALARMS | 闹钟 |
| DIRECTORY_NOTIFICATIONS | 通知 |
| DIRECTORY_PICTURES | 照片 |
| DIRECTORY_MOVIES | 电影 |
| DIRECTORY_DOWNLOADS | 下载 |
| .... | ..... |
一个Demo,将照片保存到SD卡中
/**
* 向SD卡中写入数据
*/
public void writeImageIntoSDCard(View view) throws IOException {
//获取SD卡Picture路径
File picDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File petFile = new File(picDir, "pet3.jpg");
//写入照片
FileOutputStream fileOutputStream = new FileOutputStream(petFile);
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.pet3);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
//如果仅仅是上面的代码是无法在图库中看到的,所以我们需要发送一个广播让系统来扫描SD卡
this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(petFile)));
}
【6.】 从SD卡中读取数据
我想写入SD卡都会了的话,读取就更不是问题了,但是为了例子的完整性,还是写一个简单的例子吧。 将我们写入SD卡中的图片读取出来.
/**
* 从SD卡中读取图片
*/
public void readImageFromSDCard(View view) {
File picDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File petFile = new File(picDir, "pet3.jpg");
Bitmap bitmap = BitmapFactory.decodeFile(petFile.getPath());
mPetIV.setImageBitmap(bitmap);
}
Android 常见SD卡操作的更多相关文章
- Android获取SD卡路径及SDCard内存的方法
这篇文章主要介绍了Android获取SD卡路径及SDCard内存的方法,较为详细的分析了Android针对SD卡操作所涉及的类及其具体函数功能,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了A ...
- Android 检测SD卡应用
Android 检测SD卡应用 // Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态 // ...
- Android 获取SD卡路径和推断SD卡是否存在
android获取sd卡路径方法: 不建议直接写死android sd卡的路径. public String getSDPath(){ File sdDir = null; boolean sdCar ...
- SD卡操作相关的工具SDCardUtils
SD卡操作相关的工具 package com.flyou.utils; import java.io.File; import android.os.Environment; import andro ...
- Android获取SD卡路径/内存的几种方法
Android获取SD卡路径 本篇将会带领大家学习如何获取android路径的几种常见用法,但在我开始bb之前需要大家清楚android中内存和外存之间的区别,下面进行简短介绍:android中的内存 ...
- WP8.1 Study12:文件压缩与Known Folder(包含SD卡操作)
一.文件压缩 当应用程序保存和加载数据,它可以使用压缩. 1.使用 Windows.Storage.Compression.Compressor 压缩,获得一个Compressor stream. v ...
- Android 读写SD卡的文件
今天介绍一下Android 读写SD卡的文件,要读写SD卡上的文件,首先需要判断是否存在SD卡,方法: Environment.getExternalStorageState().equals(Env ...
- android 向SD卡写入数据
原文:android 向SD卡写入数据 1.代码: /** * 向sdcard中写入文件 * @param filename 文件名 * @param content 文件内容 */ public v ...
- android 读写sd卡的权限设置
原文:android 读写sd卡的权限设置 在Android中,要模拟SD卡,要首先使用adb的mksdcard命令来建立SD卡的镜像,如何建立,大家上网查一下吧,应该很容易找到,这里不说这个问题. ...
随机推荐
- 最小化安装k8s
最小化安装k8s Nick_4438 关注 2018.07.11 10:40* 字数 670 阅读 0评论 0喜欢 0 1.前言 之前写过一篇二进制手工安装k8s的文章,过程复杂,搞了多日才安装成功. ...
- vue之props父子组件之间的谈话
眨眼就来杭州两年了,时间真快. 我们今天来说说vue的一个api---->props 首先我们先看看一个例子,是我一个项目中写的. 看到这个:有木有一点懂了.要是没懂,继续往下看 这里我们用到了 ...
- TCP和IP的三次握手和第四次挥手
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
- c#的事件用法——实现下载时发生的事件
//下载时发出的事件 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- kombu源码Producer收获一
celery内置了kombu库,看了一下kombu的源码,从官网最简单的一个例子来分析---消息发布,源码如下: from __future__ import absolute_import, uni ...
- 在html5 canvas的destination-atop属性的一些奇怪的问题
最近在整理canvas的时候发现HTML5 Canvas开发详解一个奇怪的属性解释 目标图形是显示在画布上的位图 而原图形是指要回执在画布上的形状 w3school上面是这样说的 destinatio ...
- 修改history记录数门限
你的 Bash 命令历史保存的历史命令的数量可以在 ~/.bashrc 文件里设置.在这个文件里,你可以找到下面两行: HISTSIZE=1000 HISTFILESIZE=2000 HISTSIZE ...
- linux服务器账号密码正确无法登录
登录服务器时,发现密码错误,输入后还是错误不能登录 最后发现登录日志中有pam_tally2(sshd:auth): user root (0) tally 53, deny 6 less /var/ ...
- 解决getJSON跨域登录Session丢失的问题
最近在做项目中发现,我用下面的代码异步请求到login.ashx: var memberUrl = rooturl + 'member.ashx?r=' + Math.random() + '& ...
- history命令追查登录的用户和时间
Linux查看History记录加时间,这个对于系统管理员还是很有帮助的,原因不解释,你懂得!ora11g$ history | more 1 rlwrap sqlplus / as sy ...