2013-12-13 13 views
5

Kể từ Android 4.4, khi bạn khởi chạy và Mục đích của loại Intent.ACTION_GET_CONTENT, thay vì chọn giữa Thư viện, Dropbox, v.v., nó sẽ mở Trình duyệt tài liệu mới. Điều này là tốt nếu bạn chỉ muốn mở một hình ảnh, vì điều này vẫn có thể được thực hiện theo cùng một cách so với APIS cũ hơn. Sự cố xảy ra khi bạn cần cắt hình ảnh đã chọn, vì trình duyệt tài liệu bỏ qua Uri Tôi đang chuyển đến nó và tham số cắt. Đây là những gì tôi đang làm:Cắt trong khi chọn từ Bộ sưu tập trong 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); 
} 

Sau đó, tôi lưu photoUri tôi chắc chắn tôi đã có nó có sẵn trên lợi nhuận:

@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")); 
} 

Và sau đó trong onActivityResult, tôi chỉ cần mở một InputStream với photoUri vì galleryIntent đã tạo tệp với hình ảnh được cắt.

Bây giờ khi tôi làm điều này, tệp được chỉ định bởi photoUri trong mục đích không bao giờ được tạo. Có cách nào mới để làm điều này?

Trả lời

4

Bạn có thể muốn sử dụng dữ liệu của mục đích trả về Uri.

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

    if (requestCode == ACTIVITY_SELECT_IMAGE) { 

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

Bây giờ vì DocumentsActivity không biết cách "cắt" bất kỳ thứ gì. Bạn có thể thay đổi hành động của mình thành: Intent.ACTION_PICK

Điều này sẽ cho phép bạn sử dụng DocumentsActivity trực tiếp đến Thư viện hoặc ứng dụng Ảnh.

Tôi khuyên bạn nên sử dụng hai Mục đích, tuy nhiên. Một ý định để chọn một bức ảnh, và sau đó một ý định để cắt ảnh đó. Điều này đáng tin cậy hơn vì một số ứng dụng, chẳng hạn như ứng dụng Ảnh, không biết phải làm gì với phần bổ sung "cắt".

+0

Đó là những gì tôi đang làm trong Kitkat, nhưng điều đó không cho phép tham số cắt – Makerhack

Các vấn đề liên quan