-
android 读取sd卡权限的问题
2020-08-22 14:53:29Android读写sd卡权限问题动态添加权限:”https://www.jianshu.com/p/d349047e6515 添加权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission ...Android6.0以上,权限问题
Android读写sd卡权限问题动态添加权限:”https://www.jianshu.com/p/d349047e6515
添加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
动态添加权限:
if (Build.VERSION.SDK_INT >= 23) { int REQUEST_CODE_PERMISSION_STORAGE = 100; String[] permissions = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; for (String str : permissions) { if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) { this.requestPermissions(permissions, REQUEST_CODE_PERMISSION_STORAGE); return; } } }
-
android系统读取sd卡权限奇葩问题
2018-12-28 04:05:39android6.0读取sd卡文件问题 if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager....android6.0读取sd卡文件问题
if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } }
在小米系统6.0,可以正常读取(小米5.0,华为5.0,和其他手机我测试过几台,都可以正常读取,显示图片)
唯独华为荣耀7的6.0,读取图片失败,说没有权限。
爆出异常:Unable to decode stream: java.io.FileNotFoundException: /storage/143B-DA69/DCIM/Camera/IMG_20160321_125830.jpg: open failed: EACCES (Permission denied)
代码简单,直接读取sd卡上面的图片,显示在imageView上面
(为了方便,我直接写死一个图片路径,图片是存在的)
Bitmap bitmap = compressImage("/storage/143B-DA69/DCIM/Camera/IMG_20160321_125830.jpg");
if (bitmap==null){
VLog.showToast(this,"is null");
}else {
img.setImageBitmap(bitmap);
}
//文件转bitmap
public static Bitmap compressImage(String path) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(path, options); // 此时返回 bm 为空
options.inJustDecodeBounds = false; // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = (int) (options.outHeight / (float) 640);
if (be <= 0)
be = 1;
options.inSampleSize = be; // 重新读入图片,注意此时已经把 options.inJustDecodeBounds
// 设回 false 了
bitmap = BitmapFactory.decodeFile(path, options);
return bitmap;
}
添加权限(我项目的权限,有些网络请求的权限我就不删除,直接拷贝过来)
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
找了好久原因,一开始以为我代码有问题,发现,在其他手机可以,唯独我荣耀7的6.0,运行出错。
然后我在各大应用市场,下载一下小应用(做到粗糙的app,感觉没有做什么适配的那些app)试了一试,发现,他们读取sd卡的可以,也可以读取图片。
太奇怪了。
找了一个晚上,早上我改了一下 targetSdkVersion 23 改为 targetSdkVersion 22
然后运行,发现可以了,没有爆出没有权限的错误,基本所有手机都可以。
下面是荣耀7的6.0系统出现权限问题的配置(targetSdkVersion 改为22可以成功运行)
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "interest.pictest23"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
-
android 读取sd卡中的图片
2015-09-21 20:57:39android 读取sd卡中的图片 一 读取sd卡中的图片 1 获取读取sd的权限 在AndroidMainfest.xml文件中添加 注意:在前添加 2 找到sd卡的目录(以真机的情况说明) /** *图片文件路径 ...android 读取sd卡中的图片
一 读取sd卡中的图片
1 获取读取sd的权限
在AndroidMainfest.xml文件中添加
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></uses-permission>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
<uses-permission android:name="android.permission.RESTART_PACKAGES" ></uses-permission>
注意:在<application...></application>前添加
2 找到sd卡的目录(以真机的情况说明)
/**
*图片文件路径
*打印Environment.getExternalStorageDirectory()得到:"/mnt/sdcard",即找到了sd卡的根目录
*/
public String filePath=Environment.getExternalStorageDirectory()+"/client/tile/1_0_0.jpg";
3 根据路径获取图片
File mfile=new File(path);
if (mfile.exists()) {//若该文件存在
Bitmap bm = BitmapFactory.decodeFile(path);
return bm;
}
二 注意事项
在读取sd卡中图片的过程中的一些可用判断
1 Environment.getExternalStorageState()获取路径是否成功
/*如获取成功,返回值为MEDIA_MOUNTED*/
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
String filePath=Environment.getExternalStorageDirectory().getPath();
}
2 获取sd卡的权限成功
/*fileName=Environment.getExternalStorageDirectory()+"/client" 是个文件夹目录*/
File f = new File(fileName);
//可读
if(f.canRead())
Log.v("EagleTag","very bad");
//可写
if(f.canWrite())
Log.v("EagleTag","very good");android WebView 控件加载本地sdcard中html文件图片的问题
烦恼了好几天的问题终于解决了
如果用
public void loadData(String data, String mimeType, String encoding)
则会出现html代码中图片路径不对导致不能正常显示图片(通常是一个白色的固定大小的框,或者没有)
当把路径改为绝对路径加上file://都还无法解决
终于,在网上查资料的时候发现了这个函数,正好解决这个问题
public void loadDataWithBaseURL(String baseUrl, String data, String mimeType,String encoding, String historyUrl)
baseUrl是图片的目录,在html代码中就写关于此目录的相对路径就可以了,哇嘎嘎!~
附带代码解释:
String htmlPath = "file:///mnt/sdcard/test/11.html";
String baseUrl = "file:///mnt/sdcard/test/";
webView.loadDataWithBaseURL(baseUrl, data, "text/html", "utf-8", null);
则两个调用都可以显示正常的html网页了,并且前一种可以对针对不同分辨率大小的屏幕做缩放了!!Android中的Environment.getExternalStorageState使用
如果我们想要读取或者向SD卡写入,这时就必须先要判断一个SD卡的状态,否则有可能出错。
那么SD卡状态为什么时才能读取呢,经过我的各种情况的实践,大致如下:SD状态 现象描述/mnt/sdcard目录是否存在canRead返回canWrite返回在/mnt/sdcard创建文件在/mnt/sdcard创建文件夹MEDIA_MOUNTED SD卡正常挂载TRUETRUETRUETRUETRUEMEDIA_REMOVED 无介质TRUEFALSEFALSEfalse: 原因Permission deniedFALSEMEDIA_UNMOUNTED 有介质,未挂载,在系统中删除TRUEFALSEFALSEfalse: 原因Permission deniedFALSEMEDIA_BAD_REMOVAL 介质在挂载前被移除,直接取出SD卡TRUEFALSEFALSEfalse: 原因Permission deniedFALSEMEDIA_CHECKING 正在磁盘检查,刚装上SD卡时TRUEFALSEFALSEfalse: 原因Permission deniedFALSEMEDIA_SHARED SD卡存在但没有挂载,并且通过USB大容量存储共享,操作打开USB存储TRUEFALSEFALSEfalse: 原因Permission deniedFALSEMEDIA_MOUNTED_READ_ONLY sd卡存在并且已挂载,但是挂载方式为只读--无法模拟,SD卡不允许修改权限 MEDIA_NOFS 介质存在但是为空白或用在不支持的文件系统--无法模拟,SD卡格式化后再加载会自动生成系统文件 MEDIA_UNMOUNTABLE 存在SD卡但是不能挂载,例如发生在介质损坏--无法模拟
通过上表可以看出,只有在SD卡状态为MEDIA_MOUNTED时/mnt/sdcard目录才是可读可写,并且可以创建目录及文件。
所以我们读取SD卡时一般会这么写:
010203040506String state;
String path;
state = Environment.getExternalStorageState();
if
(state.equals(Environment.MEDIA_MOUNTED)){
path = Environment.getExternalStorageDirectory().getAbsolutePath();
}
读写SD卡记得加这两个权限:
01
02
<uses-permission android:name=
"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
/>
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
* 1 在AndroidManifest文件中加入sdcard操作权限
* <!--在SDCard中创建与删除文件权限 -->
* <uses-permissioandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
* <!--往SDCard写入数据权限 -->
* <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
* 2 确认sdcard的存在
* android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)
* 3 获取扩展存储设备的文件目录
* android.os.Environment.getExternalStorageDirectory(); -
Android读取SD卡内容
2015-08-12 14:29:15在做开发的时候遇到一个问题就是需要为...Android读取手机SD卡内容: ①所需权限: ②判断是否挂载: if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { Log.i("test", "有SD卡在做开发的时候遇到一个问题就是需要为用户数据做缓存特别是图片文件缓存,下面就来看看SD卡的读写操作:
Android读取手机SD卡内容:
①所需权限:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />②判断是否挂载:
③保存文件:if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { Log.i("test", "有SD卡::"+Environment.getExternalStorageDirectory()); }else { Log.i("test", "没有SD卡"); }
④读文件示例:String fileName = "xxxxx"; String dir = "xxx"; File dirFile = new File(dir); if (!dirFile.exists()) { dirFile.mkdirs(); } File file = new File(dir + "/" +fileName); try { file.createNewFile(); OutputStream outputStream = new FileOutputStream(file); //写文件 outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); }
⑤获取SD卡总容量:File file = new File(path); if(file.exists()){ Bitmap bitmap = BitmapFactory.decodeFile(path); if(bitmap == null){ file.delete(); return null; }else { return bitmap; } }
⑥获取SD卡剩余容量:public long getSDAllSize(){ //取得SD卡文件路径 File path = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(path.getPath()); //获取单个数据块的大小(Byte) long blockSize = sf.getBlockSize(); //获取所有数据块数 long allBlocks = sf.getBlockCount(); //返回SD卡大小 //return allBlocks * blockSize; //单位Byte //return (allBlocks * blockSize)/1024; //单位KB return (allBlocks * blockSize)/1024/1024; //单位MB }
public long getSDFreeSize(){ //取得SD卡文件路径 File path = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(path.getPath()); //获取单个数据块的大小(Byte) long blockSize = sf.getBlockSize(); //空闲的数据块的数量 long freeBlocks = sf.getAvailableBlocks(); //返回SD卡空闲大小 //return freeBlocks * blockSize; //单位Byte //return (freeBlocks * blockSize)/1024; //单位KB return (freeBlocks * blockSize)/1024 /1024; //单位MB }
-
android 读取SD卡文件
2016-07-14 15:40:00因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作的一件事,那么在Android开发中,我们如何能获取SD卡的内存容量呢? 首先,要获取SD卡上面的信息,必须先对SD卡有访问的权限,因此第一件事就是... -
android6.0系统读取sd卡权限奇葩问题
2016-03-23 14:12:35android6.0读取sd卡文件问题 在小米系统6.0,可以正常读取(小米5.0,华为5.0,和其他手机我测试过几台,都可以正常读取,显示图片) 唯独华为荣耀7的6.0,读取图片失败,说没有权限。 爆出异常:Unable to ... -
android 读取SD卡所需权限
2011-06-21 11:55:00<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> -
uiautomator 2.0 android 6.0读取SD卡权限获取
2016-09-14 14:45:031. 在Manifest.xml中(application外...uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />2. MainActivity. -
Android 读取sd卡中的图片
2015-01-21 14:59:01一、获取读取SD卡的权限 在SDCard中创建与删除文件权限 --> uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 往SDCard写入数据权限 --> uses-permission android:name=... -
emwin读取sd图片_Android编程读取sd卡中图片的方法
2021-01-17 19:23:35本文实例讲述了Android读取sd卡中图片的方法。分享给大家供大家参考,具体如下:一、获取读取SD卡的权限二、找到SD卡的目录/*** Environment.getExternalStorageDirectory()得到:“、mnt/sdcard” 即找到了sd卡的根... -
Android编程读取sd卡中图片的方法
2021-01-05 05:25:01本文实例讲述了Android读取sd卡中图片的方法。分享给大家供大家参考,具体如下: 一、获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限 --> <uses android:name=android.permission.MOUNT_UNMOUNT_FILE... -
android 读取SD卡及机身内存
2014-07-01 18:03:00AndroidManifest.xml中增加SD卡访问权限 [html] view plaincopy uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> uses-permission android:... -
Android 9.0如何读取外置SD卡权限?
2019-01-07 15:04:05现在android 9.0是如何读取外置SD卡权限的?我试过动态和静态申请都不行,在线等,急急急~ 听别人说用DocumentUI,这个怎样用,网上搜到的方法很少~ -
Android读取SD卡.TXT文本内容
2016-05-23 10:53:00加入读写权限 [java]view plaincopy print? <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="android.permis... -
android 读取sd卡的txt并去除乱码
2015-05-21 13:11:48需要从sd卡读取txt 首先得添加权限 在AndroidManifest.xml 创建一个读写类 FileHelperpackage cn.test.Manager; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.... -
设置读取SD卡权限的问题
2015-08-04 16:06:09在极客学院的Android项目实战中,有个记事本项目,由于视频中没有讲到在哪里加应用的读取SD卡权限问题,导致拍摄的照片和视频都无法存到SD卡中,在网上到处查之后,终于解决了。 在Android的Manifest文件中: xml ... -
AndroidQ的SD卡读取权限问题解决方法
2021-01-03 16:29:47AndroidQ的SD卡读取权限问题解决方法 在学Android中,前面的学习都没有什么问题,一遇到权限问题就蒙了,网上找了好久的,说是Android6.0以上要动态获取权限,我尝试了但是对我项目没有用。 于是我又找又找,终于...