Android 4.4以降、Intent.ACTION_GET_CONTENTタイプのインテントを起動すると、Gallery、Dropboxなどから選択するのではなく、新しいドキュメントブラウザが開きます。これは古いAPISと同じ方法で実行することができますので、イメージを開くだけであれば問題ありません。この問題は、選択したイメージをトリミングする必要があるときに発生します。これは、ドキュメントブラウザが渡すUriとクロップパラメータを無視しているためです。Androidでギャラリーから選択中に切り抜く4.4
void take_photo() {
File file = null;
try {
file = PhotoUtils.createTemporaryFile("picture", ".jpg",
EditProfileActivity.this);
file.delete();
} catch (Exception e) {
e.printStackTrace();
}
photoUri = Uri.fromFile(file);
Intent galleryIntent= new Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
galleryIntent.putExtra("crop", "true");
galleryIntent.putExtra("aspectX", 2);
galleryIntent.putExtra("aspectY", 2);
galleryIntent.putExtra("outputX", 1300);
galleryIntent.putExtra("outputY", 1300);
galleryIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(galleryIntent, ACTIVITY_SELECT_IMAGE);
}
は、それから私は、私は戻り時に、それが利用可能だった確かに私のphotoUriを保存:
onActivityResultで@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (photoUri != null)
outState.putString("uri", photoUri.toString());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState.containsKey("uri"))
photoUri = Uri.parse(savedInstanceState.getString("uri"));
}
そして、私はちょうどphotoUriとInputStreamを開くために必要なこれは私がやっているものですgalleryIntentがクロップされたイメージでファイルを作成したためです。
これを行うと、インテントでphotoUriで指定されたファイルが作成されることはありません。これを行う新しい方法はありますか?
これは私がKitkatでやっていることですが、とにかくcropパラメータを許可していません – Makerhack