1.在AndroidManifest中添加相机和文件读写权限
出现该种报错是因为权限被限制,需要自行设置
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
2. 在调用相机的Java文件中添加下面代码
public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
private Button takePhotoBn;
private ImageView showImage;
private Uri imageUri; //图片路径
private String filename; //图片名称
//6.0以上需要调用权限校验
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS};
//在 Activity 中添加权限校验
public static void verifyStoragePermissions(Activity activity) {
int permission = ActivityCompat.checkSelfPermission(activity,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}
在onCreate中加入以下代码调用上述方法
//6.0以上需要调用权限校验
verifyStoragePermissions(this);
takePhotoBn = (Button) findViewById(R.id.button);
showImage = (ImageView) findViewById(R.id.imageView);
//取消严格模式 FileProvider
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy( builder.build() );
}
3.在AndroidManifest的application中添加android:requestLegacyExternalStorage=“true”
4、确定你的手机没有连接到电脑,因为SD卡只能被手机访问或者被电脑访问,不能二者同时访问。
5、如果你的应用需要创建文件或者目录,还需要添加如下权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />