将图像保存到新目录(app_name)

时间:2020-07-04 05:53:56

标签: java android

以下代码能够将图片保存在图片目录中,但是我找不到使用URI将图片文件保存到所需应用目录的理想方法。

编辑:将图像文件存储到其他应用可以访问的新目录的理想方法是

SaveActivity.java

 final MediaManager mediaManager = new MediaManager(this); 
    Uri imageURI = mediaManager.GetImageUri(); 
    final ImageView imageHolder = findViewById(R.id.imageHolder);
    Glide.with(this).load(imageURI).into(imageHolder);
    final String filename = mediaManager.getFileName(imageURI); 
    save.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {
                            imageHolder.setDrawingCacheEnabled(true);
                            Bitmap bitmap = imageHolder.getDrawingCache();
                            MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, filename, "description");
                        }
                    });

MainActivity.java

ImageButton btImgSettings = findViewById(R.id.btnPhoto);
    btnPhoto.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    startActivityForResult(intent, 1);
                }
            });
    }
    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                Uri uri = data.getData();
                switch (requestCode){
                    case 1: if (uri != null) {
                            String stringUri = uri.toString();
                            Intent intent = new Intent(this, SaveActivity.class);
                            intent.putExtra("imageId", stringUri);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
                            startActivity(intent);
                            break;
                    default:
                        break;
                        }
             }
   }

MediaManager

public class MediaManager {
    Activity activity;
    public MediaManager(Activity activity) {
        this.activity = activity;
    }
    public Uri GetImageUri() {
        Uri imageURI = null;
        Bundle bundle = activity.getIntent().getExtras();
        if (bundle != null) {
            String imageId = bundle.getString("imageId");
            imageURI = Uri.parse(imageId);
        }
        return imageURI;
    }
}

谢谢:)

1 个答案:

答案 0 :(得分:0)

将文件复制到您的目录中,然后使用。

Bitmap image= MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());

File root = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "YourDirectory");

        if (!root.exists()) root.mkdirs();

        String file = root.toString() + File.separator + "FileName" + ".jpg";

        try {
            FileOutputStream fOutputStream = new FileOutputStream(file);
            BufferedOutputStream bos = new BufferedOutputStream(fOutputStream);

            image.compress(Bitmap.CompressFormat.JPEG, 100, bos);

            fOutputStream.flush();
            fOutputStream.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        MediaScannerConnection.scanFile(context, new String[]{file}, null, null);
        //This line notifies the system that an image was added and to show it in the gallery.

希望这会有所帮助。随时要求任何澄清。