Direct Share Android Marshmallow Direct Share
Direct Share là một tính năng mới trong Android M, cho phép user share nội dung tới mục tiêu, ví dụ như contact, ở trong một app khác. Ý tưởng chính là user có thể share trực tiếp nội dung phù hợp mà không cần phải lần đầu ở app thứ 2, vì thế Direct Share cho phép user bỏ qua một bước trong sharing ...
Direct Share là một tính năng mới trong Android M, cho phép user share nội dung tới mục tiêu, ví dụ như contact, ở trong một app khác. Ý tưởng chính là user có thể share trực tiếp nội dung phù hợp mà không cần phải lần đầu ở app thứ 2, vì thế Direct Share cho phép user bỏ qua một bước trong sharing bình thường.
-
Tổng quan
Một ví dụ rất tuyệt của Direct Share là sharing nội dung tới một contact trong một messaging app.
Các option thường thấy xuất hiện, với Hangout. Danh sách Message và Inbox ở phía dưới. Mặc dù, Direct Share tập trung vào một số người ở trên cùng của share dialog. Thay vì click vào share, sau đó click vào messaging app như Hangouts, các contact quan trọng nhất xuất hiện ở dialog được chọn. Trong flow này, người dùng chỉ cần chọn một contact ngay lập tức.
-
Building một ChooserTargetService
Vì vậy, Direct Share có thể tiết kiệm cho người dùng một chút thời gian và làm cho nội dung chia sẻ hợp lý hơn. Nhưng làm thế nào để chúng ta thực sự thêm Direct Share cho một ứng dụng sẵn có?
Đầu tiên cần tạo một service mở rộng từ lơp ChooserTargetService, ví dụ với SampleChooserTargetService dưới đây:
public class SampleChooserTargetService extends ChooserTargetService { @Override public List<ChooserTarget> onGetChooserTargets(ComponentName targetActivityName, IntentFilter matchedFilter) { final List<ChooserTarget> targets = new ArrayList<>(); for (int i = 0; i < length; i++) { final String targetName = ... final Icon targetIcon = ... final float targetRanking = ... final ComponentName targetComponentName = ... final Bundle targetExtras = ... targets.add(new ChooserTarget( targetName, targetIcon, targetRanking, targetComponentName, targetExtras )); } return targets; } }
Override phương thức onGetChooserTargets(), hàm sẽ trả về một list các ChooserTarget là các tùy chọn của Direct Share sẽ xuất hiện trong cửa sổ share. Mỗi một ChooserTarget có một vài tham số: - Tên của target - Icon để đại diện cho target - Điểm ranking của target (từ 0.0 đến 1.0), trong trường hợp có quá nhiều direct share item, vì thế các item có điểm ranking thấp sẽ bị quên. - Tên của thành phần để bắt đầu nếu target được chọn - Một Bundle của Extras sẽ được nhập vào nội dung đầu tiên trước khi chạy thành phần tiếp theo với nội dung đó. Cách tạo ra các Chooser Target là phụ thuộc hoàn toàn vào bạn, nhưng thường thì thông tin của Chooser Target được xây dựng từ các lớp mô hình trong ứng dụng cụ thể của ban.
-
Update Android Manifest
Trong khi đã xây dựng được ChooserTargetService, bây giờ chúng ta cần gắn nó vào trong ứng dụng, để hệ thống có thể biết và sử dụng chúng.
Đầu tiên, cần khai báo custom ChooserTargetService trong AndroidManifest.xml, như sau:
<service android:name=".SampleChooserTargetService" android:label="@string/app_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
Chúng thực hiện 2 thứ: - Liên kết các dịch vụ sử dụng quyền android.permission.BIND_CHOOSER_TARGET_SERVICE - Bao gồm một IntenFilter vói hành động android.service.chooser.ChooserTargetService Sau đó, bạn cần update AndroidManifest.xml với một số thẻ meta-data:
<activity android:name=".SendMessageActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".SampleChooserTargetService" /> </activity>
Với mỗi activity mà bạn muốn expose cho ChooserTargetService, thêm thẻ meta-data cho chúng. Xác định tên như android.service.chooser.chooser_target_service, và đích giá trị cho các service trước đó. Khi một intent ngầm được gửi ra phù hợp với một trong những activity, sau đó intent chọn chooser dialog sẽ hiển thị cả biểu tượng ứng dụng bình thường cho activity đó và cũng là đanh sách các biểu tượng Chooser Target. Các biểu tượng ứng dụng bình thường chỉ mở ra activity giống như một share intent tiêu chuẩn làm, trong khi các biểu tượng Chooser Target sẽ mở ra activity với một số data cơ bản trong intent (quy định trong ChooserTargetService).
-
Direct Share flow
Hãy xem qua flow giữa các màn hình từ một quan điểm người dùng của một ví dụ Direct Share của google: https://github.com/googlesamples/android-DirectShare. User bắt đầu từ một màn hình tìm kiếm bình thường, với một share button lớn để gửi đi một intent ngầm.
Tiếp theo, user chạm vào share button, và bật một share dialog lên:
Khi một Activity mà chúng ta gắn Chooser Service vào qua metadata có thể phản ứng lại một intent ngầm, khi Chooser Service tạo ra list các lựa chọn sử dụng onGetChooserTargets() từ custom ChooserTargetService. List các Chooser Target sẽ được sủ dụng cư trú trong hộp thoại để trả lời intent.
Ngoài ra Activity thực sự mà meta-data vừa được gắn vào sẽ liệt kê bên cạnh các Chooser Target tạo ra, cho phép user chỉ cần chọn các Activity một cách bình thường và chọn ra từ việc sử dụng Direct Share. Thông thường, Activity này sẽ có một loại danh sách liên lạc hoặc danh sách người dùng để chọn.
Nếu người dùng chạm vào một trong những Chooser Target, sau đó là 'lựa chọn một số liên lạc từ danh sách' bước đó là thường là một phần của flow có thể được bỏ qua, và người sử dụng phải đi để gửi nội dung, bất cứ nơi nào có thể.