在android开发中,有时候会无法对手机中或SD卡中的文件进行读写,查看log发现是权限的问题。
这其中有多个原因。最普遍的原因是开发者没有在AndroidManifest.xml文件中对所需权限进行声明,如SD卡读写权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
而有时候尽管声明了依旧会遇到权限问题,这是因为在高版本的sdk中,如在Android7.0以上,读写SD卡权限需要在代码中进行申请,如下:
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
public void verifyPermission(Context context){
int permission = ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
RecognizeActivity.this,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}
如果申请了依旧出现Permission Denied的问题,那就很有可能是你所需读写的文件的位置属于用户权限不可达的位置。我的手机的外置SD卡的目录就属于这种情况,无论是在该SD卡的目录下创建文件,还是进行文件读写,均出现权限问题。可能是因为没有root?将文件转存于手机存储后,问题便不再出现了。