Làm thế nào để các ứng dụng Android thực hiện nút chia sẻ?


11

Tôi đã tự hỏi làm thế nào các ứng dụng Android và Android thực hiện nút chia sẻ và cơ chế chia sẻ. Chẳng hạn, khi tôi nhấn nút chia sẻ trên YouTube, một danh sách tắt các ứng dụng sẽ chia sẻ để bật lên. Danh sách này được xác định như thế nào? Có một mục đích "chia sẻ" cụ thể, và sau đó tất cả các điểm có khả năng chia sẻ loại ý định được cung cấp trong phần bổ sung ý định sẽ xuất hiện không? Tên kỹ thuật của mẫu thiết kế được sử dụng để thực hiện điều này là gì? Cảm ơn.


1
Bạn thực sự có nghĩa là "poops", hay đó là một lỗi đánh máy cho "pops"? Trong tiếng Anh Mỹ ít nhất, trước đây là những gì em bé làm với tã của họ.
JDługosz

Bạn đúng. Gần đây tôi đã chuyển sang bàn phím Swype trên Android cho phép tôi gõ nhanh hơn, nhưng đôi khi nó nhập sai từ và tôi không để ý. Không biết phải làm gì với nó, tôi không phải là người rất cẩn thận. Đôi khi trong phụ và thậm chí không thể nhìn thấy màn hình đúng cách.
Jack Maddington

Trong tiểu (tàu ngầm?)! Phải làm gì: hiệu đính trước khi nộp. Và đừng làm ô nhiễm danh sách dự đoán của bạn với những từ đáng xấu hổ.
JDługosz

Thật trùng hợp, danh sách dự đoán của tôi chứa đầy những thứ từ các email cũ, mà Swype đọc tự động. Rất tiếc!
Jack Maddington

Câu trả lời:


10

Có hai phần cho vấn đề này: cơ chế cho các ứng dụng giao tiếp nói rằng chúng có thể chia sẻ mọi thứ và cơ chế cho các ứng dụng có nội dung để chia sẻ. Tôi sẽ giải quyết từng cái một, nhưng trước tiên hãy ghi chú nhanh về ý định .

Ý định

Các ý trong Android là những gì được sử dụng để bắt đầu một ứng dụng. Nó có thể hoạt động như một phím tắt hoặc giống như một liên kết tệp Windows. Mục đích có thể chỉ định tên của ứng dụng để bắt đầu, nhưng nó không phải. Nó cũng có thể chỉ định hành động để thực hiện (ví dụ: "mở hoạt động chính của bạn", "xem URL này", "tạo mục nhập lịch") và loại MIME của đối tượng mà nó sẽ hành động (ví dụ: điều bạn muốn xem có loại hình ảnh / jpeg). Một số tên hành động dành riêng cho một ứng dụng cụ thể, nhưng nhiều tên được Android chuẩn hóa để cho phép các ứng dụng tương tác.

Bộ lọc ý định và ứng dụng truyền thông

Mỗi ứng dụng chỉ định các bộ lọc ý định để nói loại hành động nào nó có thể thực hiện. ví dụ: ứng dụng xem hình ảnh sẽ đăng ký bộ lọc ý định cho "xem URL này" trong đó loại MIME là "hình ảnh / *"; một trình duyệt web sẽ đăng ký một bộ lọc ý định cho "xem URL này" trong đó lược đồ URL là "http" hoặc "https". Để có thể chia sẻ mọi thứ, một ứng dụng đăng ký bộ lọc ý định cho mục đích "gửi", với một loại cụ thể (ví dụ: nếu nó chỉ có thể chia sẻ ảnh) hoặc cho bất kỳ loại nào.

Ứng dụng nội dung

Ứng dụng muốn chia sẻ một số nội dung sẽ tạo ra ý định với hành động "chia sẻ" và một URL trỏ đến nội dung cần chia sẻ. (Đây thường là URL "tạm thời" cung cấp cho ứng dụng nhận quyền truy cập tạm thời vào tệp trong bộ nhớ riêng của ứng dụng nội dung hoặc luồng được tạo bởi ứng dụng nội dung.) Nó không chỉ định tên của ứng dụng để xử lý ý định. Sau đó, nó đưa ra ý định đó cho khung Android và yêu cầu Android hiển thị hộp thoại chọn . Android so sánh ý định với các bộ lọc ý định từ tất cả các ứng dụng đã cài đặt và tạo danh sách và hiển thị nó cho người dùng. Khi người dùng chọn một ứng dụng cụ thể, Android sẽ khởi động ứng dụng đó và chuyển ý định đó. Ứng dụng sử dụng URL để lấy nội dung từ ứng dụng gốc.

Mới trong Marshmallow: Chia sẻ trực tiếp

Trong Marshmallow, có một cơ chế khác gọi là Chia sẻ trực tiếp . Điều này bổ sung cơ chế mục đích để bạn có thể chọn người hoặc nhóm để chia sẻ trực tiếp từ hộp thoại người chọn, bỏ qua bước bổ sung của "bạn muốn gửi cho ai". Điều này hoạt động hơi khác nhau: ứng dụng truyền thông phải cung cấp một dịch vụ. Khi ứng dụng có nội dung yêu cầu người chọn, Android sẽ khởi động dịch vụ cho từng ứng dụng có liên quan. Dịch vụ trả về một danh sách các mục tiêu chia sẻ có liên quan và Android sẽ tập hợp tất cả các danh sách riêng biệt đó vào danh sách được hiển thị trong hộp thoại.


Nhưng, tôi đã thấy các ứng dụng hiển thị khá nhiều hộp thoại cho người chọn khác nhau . Tất cả chúng có thực sự được hiển thị bởi HĐH hay chính ứng dụng có thể có được danh sách các mục tiêu không?
dùng1686

@grawity Hộp thoại tích hợp có một số tùy chọn tùy chỉnh (ví dụ: để đặt tiêu đề), nhưng ứng dụng cũng có thể yêu cầu Android đưa ra danh sách các mục tiêu chia sẻ và đưa chúng vào hộp thoại riêng. Trình chọn trình duyệt của tôi bURLy là một ví dụ về điều này, nhưng với mục đích "URL mở" thay vì mục đích "gửi".
Dan Hulme

11

Tôi không phải là nhà phát triển, vì vậy tôi chỉ có thể đưa ra một lời giải thích thô thiển: các ứng dụng tuyên bố trong Manifestđó Mimetypes họ hiểu và sẵn sàng phản hồi về các hành động chia sẻ. Đối với điều này, họ định nghĩa cái gọi là "bộ lọc ý định", vd:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="message/*" />
    <data android:mimeType="multipart/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>

Vì vậy, bất cứ khi nào bạn nhấn nút "chia sẻ", nội dung chia sẻ sẽ được đánh giá và đối sánh với các ứng dụng đã tuyên bố sẵn sàng nhận định dạng.

Nguồn:


1
Đó là khá nhiều trực tiếp. Ứng dụng (thực hiện chia sẻ) tự nó có thể lọc một số người trả lời có ý định, nhưng hầu hết thì không.
coteyr

2
@HiltonShumway đó là lý do tại sao tôi nêu lên câu trả lời của anh ấy. Khác với tôi, Dan phù hợp với sự phát triển và biết rõ hơn mọi thứ diễn ra như thế nào. Vì vậy, khi tôi đăng câu trả lời của mình, tôi đã hy vọng anh ấy cũng sẽ đăng một câu - anh ấy đã không làm tôi hy vọng :)
Izzy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.