2013-07-20 37 views
44

Tôi đang cố gắng cho phép người dùng chọn bất kỳ hình ảnh nào họ muốn trên thiết bị của họ để sử dụng làm hình nền trong ứng dụng hình nền này mà tôi đang xây dựng. Đối với một số lý do khi tôi viết:Sự khác biệt giữa Intent.ACTION_GET_CONTENT và Intent.ACTION_PICK

Intent myIntent = new Intent(Intent.ACTION_PICK); 
myIntent.setType("image/*"); 
startActivityForResult(myIntent, 100); 

tôi đi thẳng vào phòng trưng bày, nhưng khi tôi viết:

Intent myIntent = new Intent(Intent.ACTION_GET_CONTENT, null); 
myIntent.setType("image/*"); 
startActivityForResult(myIntent, 100); 

tôi nhận được để lựa chọn Bộ sưu tập, hoặc Google Drive. Cách tốt nhất để cho phép người dùng chọn ứng dụng nào để truy xuất ảnh từ mọi thời điểm? Hay tại sao hai hằng số ý định khác nhau lại tạo nên sự khác biệt?

Trả lời

78

Intent đầu tiên của bạn không hợp lệ. protocol for ACTION_PICK yêu cầu bạn cung cấp Uri cho biết bộ sưu tập bạn đang chọn.

Cách tốt nhất để cho phép người dùng chọn ứng dụng nào để truy xuất ảnh từ mọi thời điểm?

Nếu bạn muốn người dùng chọn thứ gì đó dựa trên loại MIME, hãy sử dụng ACTION_GET_CONTENT.

Nếu bạn có một số bộ sưu tập cụ thể (được xác định bằng số Uri) mà bạn muốn người dùng chọn, sử dụng ACTION_PICK.

Trong trường hợp cà vạt, hãy đi với ACTION_GET_CONTENT. Trong khi ACTION_PICK không được chấp nhận chính thức, Dianne Hackborn recommends ACTION_GET_CONTENT.

+1

Thú vị là ý định đầu tiên không hoạt động, mặc dù nó không hợp lệ. Đánh giá cao các con trỏ mặc dù. Cảm ơn – EGHDK

+0

Vì tò mò, tại sao Dianne lại phát ra âm thanh như 'ACTION_GET_CONTENT' được thêm vào API sau, gọi nó là" hiện đại ". Cả hai đều có sẵn trong API 1, do đó, điều này làm cho tôi cảm thấy như các kỹ sư Android được nâng lên nếu họ thực sự không muốn mọi người sử dụng 'ACTION_PICK'. Đã quá muộn để loại bỏ điều đó bằng API 1 chưa? –

+1

@Turbo: Bạn sẽ phải hỏi cô ấy, xin lỗi. – CommonsWare

12

Các hành động hiện đạiACTION_GET_CONTENT, được tốt hơn hỗ trợ,

ACTION_PICK:

Hoạt động Hành động: Chọn một mục từ dữ liệu, trở về những gì đã chọn.

Nhập: getData() là URI chứa thư mục dữ liệu (vnd.android.cursor.dir/*) để chọn một mục.

Đầu ra: URI của mục đã được chọn.

liên tục Value: "android.intent.action.PICK"


Difference: -

Hành động Hoạt động: Cho phép người dùng lựa chọn một loại đặc biệt của dữ liệu và trả lại.

Điều này khác với ACTION_PICK ở đây, chúng tôi chỉ nói loại dữ liệu mong muốn, không phải là URI của dữ liệu hiện tại mà từ đó người dùng có thể chọn.

A ACTION_GET_CONTENT có thể cho phép người sử dụng để tạo dữ liệu khi nó chạy (ví dụ chụp ảnh hoặc ghi một âm thanh), hãy để họ duyệt trên web và tải các dữ liệu mong muốn vv

Referencehttp://developer.android.com/reference/android/content/Intent.html#ACTION_GET_CONTENT

+0

ACTION_GET_CONTENT có cho tôi lỗi trên các thiết bị cũ không? – EGHDK

+2

"ACTION_PICK không được dùng nữa" - về mặt kỹ thuật, không phải vậy. – CommonsWare

+0

Tôi không thể biết sự khác biệt giữa ACTION_PICK và ACTION_GET_CONTENT cho đến khi tôi đọc ví dụ của bạn: chụp ảnh hoặc ghi âm. Cảm ơn. – jclova

0
public static final String ACTION_GET_CONTENT 

Đã thêm vào cấp API 1

Hành động hoạt động: Cho phép người dùng chọn một loại dữ liệu cụ thể và trả về nó . Điều này khác với ACTION_PICK ở đây, chúng tôi chỉ nói loại dữ liệu nào là mong muốn, không phải một URI của dữ liệu hiện có mà người dùng có thể chọn.Một ACTION_GET_CONTENT có thể cho phép người sử dụng để tạo ra các dữ liệu khi nó chạy (ví dụ chụp ảnh hoặc ghi một âm thanh), hãy để họ duyệt trên web và tải về dữ liệu mong muốn vv

qua http://developer.android.com/reference/android/content/Intent.html#ACTION_GET_CONTENT