2013-12-13 2 views
5

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で指定されたファイルが作成されることはありません。これを行う新しい方法はありますか?

答えて

4

返されたインテントのデータUriを使用すると便利です。

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    if (requestCode == ACTIVITY_SELECT_IMAGE) { 

    if(resultCode == RESULT_OK){  
     Uri realUri = intent.getData(); 
    } 
    } 
} 

ここで、DocumentsActivityは何か「切り抜く」方法を知らないので、アクションを次のように変更することができます:Intent.ACTION_PICK

これにより、ギャラリーやPhotosアプリケーションに直接アクセスするDocumentsActivityを回避できます。

ただし、2つのインテントを使用することをお勧めします。 1つは写真を選択し、もう1つはその写真をトリミングするためのインテントです。これはPhotosアプリのような一部のアプリは余分な "作物"をどうするかわからないので、はるかに信頼性が高い。

+0

これは私がKitkatでやっていることですが、とにかくcropパラメータを許可していません – Makerhack

関連する問題