这是我的基本代码,用于检查操作系统是否为marshmallow
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(checkAndRequestPermissions()){
dispatchTakePictureIntent();
}else{
Toast.makeText(this, "Permission not granted", Toast.LENGTH_SHORT).show();
return;
}
}
//For pre M devices
dispatchTakePictureIntent();
这是创建图像的方法。这会在Lollipop设备中创建目录和图像,但在棒棒糖+操作系统中它不会创建目录和图像。
我正在使用为Nougat定义的file pattern,它适用于棒棒糖设备,但不适用于棒棒糖+设备。
private void dispatchTakePictureIntent() {
File photoFile= null;
String timestamp;
timestamp = String.valueOf(System.currentTimeMillis());
String path= "/app_cam/selfie_"+timestamp+".jpg";
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
photoFile = Environment.getExternalStoragePublicDirectory(path);
String authorities = getApplicationContext().getPackageName() + ".fileprovider";
filePath = FileProvider.getUriForFile(this, authorities, photoFile);
takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, filePath);
startActivityForResult(takePictureIntent, REQUEST_CODE);
我从picasso
java.io.FileNotFoundException:没有这样的文件或目录 android.os.Parcel.openFileDescriptor(Native Method)at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:253) 在android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:199) 在 android.support.v4.content.FileProvider.openFile(FileProvider.java:544) 在 android.content.ContentProvider.openAssetFile(ContentProvider.java:1363) 在java.lang.Thread.run(Thread.java:818)at com.squareup.picasso.Utils $ PicassoThread.run(Utils.java:411)
我向用户请求了这些许可;
修改
因为我已经filePath
所以设置了dispatchTakePictureIntent()
所以onActivityResult()
我做了以下事情。
Intent intent = new Intent(CameraLaucherActivity.this, PhotoEditor.class);
intent.putExtra("filePath", filePath);
startActivity(intent);
在第二项活动中,我从意图
获得URI
Intent intentData = getIntent();
imageUri = (Uri) intentData.getExtras().get("filePath");
之后,我会在image
imageview
Picasso.with(this).load(imageUri).config(Bitmap.Config.RGB_565).into(mImageView, new Callback() {
@Override
public void onSuccess() {
loading.setVisibility(View.INVISIBLE);
}
@Override
public void onError() {
}
});