Android 读写位于SD卡上的sqlite数据库文件错误问题
09-12 15:24:33.903: W/System.err(19499): java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[])' on a null object reference
09-12 15:25:25.763: E/SQLiteDatabase(19499): Failed to open database '/storage/sdcard1/ArcGIS/xxxxx.db'.
09-12 15:25:25.763: E/SQLiteDatabase(19499): android.database.sqlite.SQLiteException: not an error(Sqlite code 0): Could not open the database in read/write mode.,(OS error - 13:Permission denied)
09-12 15:25:25.763: E/SQLiteDatabase(19499): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
--------------------------------------------------------------------------------------------------------------------
2.3中声明
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
可以读写SDCARD,包括其他storage,比如内部flash,usb等等
4.0中如果只声明这个,会发现其他mount的设备有可能没有写权限,需要同时声明
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
这样才可以读写/mnf/flash , /mnt/usb, /mnt/externa等目录
可能4.0增加了对其他存储设备的内建支持,其他设备不再共享gid "sdcard_rw"
而改用"media_rw",相应的细分了权限声明
2.3中 dr-xrwxr-x system sdcard_rw 1969-12-31 16:00 flash
4.0中 d---rwxr-x system media_rw 1970-01-01 08:00 flash
权限控制文件在 frameworks/base/data/etc/platform.xml:
- <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
- <group gid="sdcard_rw" />
- </permission>
- <permission name="android.permission.WRITE_MEDIA_STORAGE" >
- <group gid="media_rw" />
- </permission>
4.4 开始限制第三方应用对外置存储卡(一般为外置可插拔TF卡)的读写权限,要申请到这个权限需要申请 WRITE_MEDIA_STORAGE 权限,而这个权限是需要系统签名才能生效的.
不过有些手机厂家会放开这个权限,使得应用申请了 WRITE_EXTERNAL_STORAGE 就可以访问外置存储卡 (相当于和4.4前一样了),这也是为了兼容之前应用做的折中.这么做的厂家也在逐渐减少. 限制读写外置存储卡,自然是为了类似用户隐私这类的需求考虑的.
比如,每个应用都在里面写东西,外置存储卡目录就会很乱.而作为可插拔卡,用户是会将此卡挂载到其他设备上的(比如PC),这时候用户就会面对的是一大堆不知所然的目录. 其实外置存储卡在4.4后还是可以读写的,只是Android对其做了限制.
第三方应用读写外置存储卡,仅限 Android/data/<Package.Name> 这一个目录(和内置存储卡对应目录一样) 5.1.1 查看etc/permissions/platform.xml,存在 WRITE_MEDIA_STORAGE 节点,AndroidManifest.xml增加<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
Eclipse会提示错误,需要clean一下当前工程,没有错误提示,可以编译,但依旧不能读取根目录中指定文件夹数据。 临时解决方案:在SD卡、USB设备中,创建 Android/data/<Package.Name> 文件夹,将数据移动到该目录之中。
参考资料:
http://blog.csdn.net/zmyde2010/article/details/7031461
http://blog.csdn.net/eustoma/article/details/7108144
https://zhidao.baidu.com/question/136950531811948485.html
Android 读写位于SD卡上的sqlite数据库文件错误问题的更多相关文章
- android中读取SD卡上的数据
通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...
- Android开发之SD卡上文件操作
1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...
- Android 读取手机SD卡根目录下某个txt文件的文件内容
1.先看activity_main.xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- android开发之-查看、编辑手机sqlite数据库文件-实测
效果图: 1.开始——运行——输入cmd ,输入adb shell,错误:一是“adb不是内部命令或外部命令,也不是可运行的程序或批处理文件”,二是“error:device not found”. ...
- android进入adb shell步骤及修改sqlite数据库文件的权限
1 准备工作 (1)将adb.exe从 \Sdk\platform-tools目录下移动到 \Sdk\tools目录下(主要是看emulator这几个文件在哪个文件夹就把adb.exe移动到哪个文件 ...
- android打开存储卡(TF卡\SD卡)中的sqlite文件
android的SDK直接支持sqlite3的API. 打开SD卡上面的sqlite数据库,不需要SQLiteOpenHelper的继承类.只需要,SQLiteDatabase中的一些静态方法.如 ...
- android 操作SD卡上的文件
(1)说明:操作SD卡上的文件须要增加下面权限 在SD卡上创建和删除文件权限 <uses-permission android:name="android.permission.M ...
- android学习笔记47——读写SD卡上的文件
读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...
- Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上
假设使用默认的系统管理,默认放在包以下.比較省心.并且在卸载app后不会造成数据残留.可是这样也有一个问题.比方我做一个背单词的软件,那么当用户卸载掉这个app时,他辛辛苦苦下载的单词库也没了... ...
随机推荐
- GNU风格 ARM汇编语法2
.GNU汇编程序中的标号symbol(或label) 标号只能由a-z,A-Z,-,".",_等(由点.字母.数字.下划线等组成,除局部标号外,不能以数字开头)字符组成. Symb ...
- C# 延时函数 非Sleep
1.示例: using System.Runtime.InteropServices; [DllImport("kernel32.dll")] static extern uint ...
- MySQL的使用笔记
@Reference Manual (以下简称REF-M) 在官网,选择MySQL Server,选择Documentation,就可以下载了,建议下载PDF 注意版本要对应 很重要,需要的时候就go ...
- 屏幕亮度(XE10.1+WIN8.164)
相关资料: http://bbs.csdn.net/topics/390664310 实例代码: unit Unit1; interface uses Winapi.Windows, Winapi.M ...
- asp.net显示用户信息
web.config <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应 ...
- POj 1753--Flip Game(位运算+BFS)
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 30669 Accepted: 13345 Descr ...
- C++ for fun & test
#include <iostream> using namespace std; class DaYe { public: const DaYe & gege() const { ...
- java- Servlet-session
Servlet 相关:http://blog.csdn.net/ggGavin/article/category/2134213 Servlet——Session(1)之基础知识 Servlet——S ...
- ajax回调函数中使用$(this)取不到对象的解决方法
如果在ajax的回调函数内使用$(this)的话,实践证明,是取不到任何对象的,需要的朋友可以参考下 $(".derek").each(function(){ $(this).cl ...
- SecureCRT工具
技巧收集: 文本文件内容 复制该行内容yy,p粘贴 2+yy复制两行 dd 删除该行 文件内容搜索 非编辑状态/+查找内容 查找指定行 :+行号