TLDR アプリで別のアプリから画像を共有しようとするときに、選択した画像でクロップ インテントを開きたい
私のアプリでは、共有インテントを介して別のアプリから画像を共有できます。たとえば、私のアプリで Reddit から画像を直接共有できます。それは完全に正常に動作しますが、一部の画像には上下に巨大な黒い画面があるため(おそらく単なるスクリーンショットであるため)、画像をトリミングできる機能を追加したいと思います。
ギャラリーから取得した画像をトリミングできます。ただし、外部インテントから共有を使用すると、画像が携帯電話に保存されないため、開いてトリミングすることができません。
私のコードで画像を取得する方法
private void getData() {
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if (type.startsWith("image/")) {
handleSendImage(intent);
}
if (type.startsWith("text/")) {
handleSendText(intent);
}
}
}
void handleSendImage(Intent intent) {
imageUrl = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUrl != null) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
try {
BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUrl),
null,
options);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
choose_image_iv.setColorFilter(0);
Picasso.get().load(imageUrl).fit().into(choose_image_iv);
try {
Bitmap img = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUrl);
if (img == null) return;
int w = img.getWidth();
int h = img.getHeight();
rat = (double) w / (double) (h);
} catch (IOException e) {
e.printStackTrace();
}
if (rat == 0.0) {
rat = 1.0;
}
rightNavButton.setEnabled(true);
rightNavButton.setImageResource(R.drawable.baseline_navigate_next_black_24dp);
rightNavButton.setColorFilter(ContextCompat.getColor(ShareFromOutsideActivity.this, R.color.AppColor));
titleView.setText(R.string.choose_category);
post_text_text_tv.requestFocus();
}else {
new SweetAlertDialog(this, SweetAlertDialog.ERROR_TYPE)
.setTitleText("Mit diesem Bild scheint etwas nicht zu stimmen. Probier ein anderes").show();
}
}