关于android存储
今天在测试android拍照功能时遇到一个困惑:照片拍成功了,程序能都能读取到,但是在手机储存中怎么也找不到拍的照片。先将学习过程中经过的曲折过程记录如下:
一:拍照并保持
通过调用android 的Camera接口,拍照片,在回调接口中保存图片:
public void onPictureTaken(byte[] bytes, Camera camera) {
// 定义文件名
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmssSS");
String fileName = dateFormat.format(date)+".jpg";
FileOutputStream os = null;
boolean success = true;
try{
// 保存到内部储存
os = getActivity().openFileOutput(path, Context.MODE_PRIVATE);
os.write(bytes);
}catch (IOException e){
success = false;
Log.e(TAG, "Error writing to file " + fileName, e);
}
原来此次调用的:getActivity().openFileOutput(path, Context.MODE_PRIVATE);是把文件储存到了APP的私有储存中的/data/data/...app包路径/file 中了,这个私有目录是不能被外部访问的,所以在手机储存中肯定看不到。
二:该为储存到外部储存
public void onPictureTaken(byte[] bytes, Camera camera) {
// 定义文件名
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmssSS");
String fileName = dateFormat.format(date)+".jpg";
FileOutputStream os = null;
boolean success = true;
try{
File path = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File file = new File(path, fileName);
path.mkdirs();
if (path.exists()){
os = new FileOutputStream(file);
}else {
Log.e(TAG,"Create path failed");
return;
}
// 保存到内部储存
os.write(bytes);
}catch (IOException e){
success = false;
Log.e(TAG, "Error writing to file " + fileName, e);
}
向外部储存读写文件需要申请权限,在app配置文件中增加如下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
好了,文件保存成功了,但是还是在手机储存中看不到,为什么?
原来,android储存中新增文件,并不能及时刷新储存目录,需要重启手机或者通过代码手动刷新目录。手动刷新目录经过我测试的有以下两种方式:
1.发广播
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file.getAbsolutePath().toString())));
其中第二个参数指的是保存文件的绝对路径
2.MediaScannerConnection
MediaScannerConnection.scanFile(getActivity(), new String[]{file.getAbsolutePath().toString()}, null, null);
三:总结
Android的储存分为app私有储存和外部储存。app私有储存是不可以被其他app访问的。外部储存是可以被其他app共享的。外部储存并不是指SD卡储存,也包括手机自身的储存空间。
关于android存储的更多相关文章
- Android存储访问及目录
Android存储访问及目录 Android的外部存储 Android支持外部存储(case-insensitive filesystem with immutable POSIX permissio ...
- Android存储之SQLite数据库
Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...
- Android存储路径你了解多少?
在了解存储路径之前,先来看看Android QQ的文件管理界面,了解一下QQ的数据文件路径来源,到底是来源于什么地方? 手Q文件管理对应存储目录 我的文件:是指放在QQ指定目录下的文件:/tencen ...
- Android 存储(本地存储 SD卡存储 SharedPreference SQLite ContentProvider)
本文出自:http://blog.csdn.net/dt235201314/article/details/73176149 源码下载欢迎Star(updating):https://github.c ...
- 一篇文章搞懂android存储目录结构
前言 前两天因为开发一个app更新的功能,我将从服务器下载的apk文件放在了内部存储目录(测试手机为小米,路径为:data/user/0/packagename/files)下面,然后安装的时候一直安 ...
- android存储方式的应用场景
作为一个完整的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.文件存储.SQLite. Content Provider ...
- Android开发学习——android存储
Android的存储 内部存储空间RAM内存:运行内存,相当于电脑的内存ROM内存:存储内存,相当于电脑的硬盘外部存储空间 SD卡:相当于电脑的移动硬盘 * 2.2之前,sd卡路径:sdcard ...
- Android存储
Android的四种数据存储方式: 1.SharedPrefrences 2.SQLite 3.Content Provider 4.File SharedPrefrences: 1.是一种轻型的数据 ...
- 利用反射得到android存储路径
获得android手机的存储路径: public String getPrimaryStoragePath(){ try{ StorageManager sm = (StorageManager) c ...
- android 存储
总共四种:SharedPreferences,文件存储,SQLite数据库,ContentProvider,网络存储 1.sharedPreferences:适合存储少量数据,而且存取的格式简单,采用 ...
随机推荐
- linux驱动初探之字符驱动
关键字:字符驱动.动态生成设备节点.helloworld linux驱动编程,个人觉得第一件事就是配置好平台文件,这里以字符设备,也就是传说中的helloworld为例~ 此驱动程序基于linux3. ...
- 6/14 Sprint2 看板和燃尽图
中间部分还需要改进 小组评分:(团队总分为80) 团队成员: 101丘娟同学:21 107杨晓霞同学:18 108周诗琦同学:22 124陈程同 ...
- 关于phpstorm中安装配置xdeug
最近从网上找了好多phpstorm中配置安装xdebug的信息,但是貌似都失败了 ...我也不知道是为什么... 突然有一天 不知道怎么整的就配置成功了 现在可以分享一下了 正好我用的软件的版本 ...
- PHP数组去重..............过滤字段
$test_data = M('hot'); //实例化数据表 $data = $test_data->Distinct(true)->field('descriprion')->o ...
- 如何通过pid快速找出进程的路径
[carlton@oc3408554812 Desktop]$ top top - 09:35:06 up 32 min, 2 users, load average: 1.49, 1.56, 1 ...
- 1362. Classmates 2
http://acm.timus.ru/problem.aspx?space=1&num=1362 水题,树形DP 代码: #include<iostream> #include& ...
- win7(64)位下WinDbg64调试VMware10下的win7(32位)
win7(64)位下WinDbg64调试VMware10下的win7(32位) 一 Windbg32位还是64位的选择 参考文档<Windbg 32位版本和64位版本的选择> http:/ ...
- ASP.NET Web API 入门示例详解
REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...
- js异步加载
默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页 ...
- Windows 7中无法访问FTP的解决方法
解决: netsh advfirewall set global StatefulFTP disable