在Marshmallow + app上没有创建用于存储图像的文件夹

时间:2018-02-13 13:20:24

标签: android image android-layout android-fragments picasso

这是我的基本代码,用于检查操作系统是否为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)

我向用户请求了这些许可;

  • Manifest.permission.CAMERA
  • Manifest.permission.READ_EXTERNAL_STORAGE
  • Manifest.permission.WRITE_EXTERNAL_STORAGE

修改

因为我已经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() {

        }
    });

0 个答案:

没有答案