android7.0适配权限问题

本文详细解析了在Android 7.0及以后版本中,尝试使用WorldReadable和WorldWriteable模式打开数据库时遇到的安全异常问题,并提供了正确的数据库操作模式及文件存储路径建议。
12-07 10:52:56.107 22139 29957 W ApplicationSettingsFragment: exportMessages getAppropriateFileName fileName =//sdcard//message//sms001.db
12-07 10:52:56.123 22139 29957 D ApplicationSettingsFragment: exportMessages query sms cursor count is 2
12-07 10:52:56.123 22139 29957 E ApplicationSettingsFragment: exportMessages can't create the database file
12-07 10:52:56.123 22139 29957 W System.err: java.lang.SecurityException: MODE_WORLD_READABLE no longer supported
12-07 10:52:56.123 22139 29957 W System.err: at android.app.ContextImpl.checkMode(ContextImpl.java:2165)
12-07 10:52:56.123 22139 29957 W System.err: at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:674)
12-07 10:52:56.123 22139 29957 W System.err: at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:668)
12-07 10:52:56.123 22139 29957 W System.err: at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:283)
12-07 10:52:56.123 22139 29957 W System.err: at com.android.messaging.ui.appsettings.ApplicationSettingsActivity$ApplicationSettingsFragment.copyToPhoneMemory(SourceFile:638)
12-07 10:52:56.123 22139 29957 W System.err: at com.android.messaging.ui.appsettings.ApplicationSettingsActivity$ApplicationSettingsFragment.-wrap1(SourceFile)
12-07 10:52:56.124 22139 29957 W System.err: at com.android.messaging.ui.appsettings.ApplicationSettingsActivity$ApplicationSettingsFragment$6.run(SourceFile:563)
myDatabase = openOrCreateDatabase(DATABASE_NAME,1, null);

4中模式:

四种模式,分别为: 
Context.MODE_PRIVATE    = 0
Context.MODE_APPEND    = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2

7.0后
代码调用,存放在data/data/包名/xxx
目录下的文件设置
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
会抛安全异常!!!

1、
SharedPreferences sp =ctx.getSharedPreferences(“CITY”, MODE_PRIVATE);
2、
SQLiteDatabase db =this.openOrCreateDatabase(“test_db.db”, Context.MODE_PRIVATE, null);
3、
getCacheDir()方法用于获取/data/data/cache目录

4、

FileOutputStream fos = context.openFileOutput(fileName, context.MODE_PRIVATE);

FileInputStream fis = context.openFileInput(fileName);
注:
如果使用上面的方法,当你的应用在被用户卸载后,
data/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。
getExternalCacheDir和getExternalFilesDir
是存放在/storage/sdcard0/Android/data/packagename下面的,这个是放在外置存储卡的,这个目录下的内容 可以使用文件浏览系统查看到,但是如果清空数据或者卸载应用,俩个目录下的文件也将被清空。

附加:
将文件写入SD卡内:
获取SDCard的状态:
Environment.getExtemalStorageState()
Environment.MEDIA_MOUNTED手机装有SDCard,并且可以进行读写
获取SDCard的目录:Environment.getExtemalStorageDirectory()

学习:
http://www.2cto.com/kf/201312/267581.html
http://blog.youkuaiyun.com/leeo1010/article/details/28600575
http://www.cnblogs.com/rond/p/3553156.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值