unknown error (Sqlite code 14): Could not open database解决方案

来源:互联网 发布:淘宝宝贝详情视频代码 编辑:程序博客网 时间:2024/05/20 04:30
今天在运行之前一个项目是突然一运行就崩溃,感觉甚是奇怪,查看log日志发现:
Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (Sqlite code 14): Could not open database, (OS error - 13:Permission denied)
根据日志提示好像是缺少权限,因为项目只用到了存储,然后去查看AndroidManifest.xml中的权限,发现
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
这两条权限都在呀,这是怎么回事呢,百度了下都说是权限未添加。最后突然想到我这台手机是Android6.0的系统,然后为了验证,找了一台4.0系统的运行,直接就运行起来了,好了这下找到问题了就好解决了。
Android6.0以后出现了很多权限即使在AndroidManifest.xml中配置了也不行,必须手动请求,或者在设置-应用-权限打开对应的权限。
在6.0系统以后使用有些权限是可以进行这样的操作:
public static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
/**
* 验证读取sd卡的权限
*
* @param activity
*/
public boolean verifyStoragePermissions(Activity activity) {
/*******below android 6.0*******/
if (Build.VERSION.SDK_INT < 23) {
return true;
}
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
return false;
} else {
return true;
}

}

在调用请求权限的Activity中重写 
/**
 * 请求权限回调
 *
 * @param requestCode
 * @param permissions
 * @param grantResults
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_EXTERNAL_STORAGE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showToast("授权成功");
} else {
showToast("授权失败,请去设置打开权限");
}
}
}

可以将权限名换掉变成请求其他权限。做一个小的记录,同时希望可以帮助有需要的人。
0 0
原创粉丝点击