[Học Android] Hướng dẫn nhận dữ liệu từ ứng dụng khác
![[Học Android] Hướng dẫn nhận dữ liệu từ ứng dụng khác](https://webnulled.net/wp-content/uploads/2022/02/android-huong-dan-nhan-du-lieu-tu-ung-dung-khac_6202b1928447a.png)
Các ứng dụng Android có thể chia sẻ data (text, image, video, audio,…) với nhau một cách dễ dàng. Ví dụ bạn có thẻ chia sẻ một image từ ứng dụng Google Photo tới ứng dụng Facebook hoặc Instagram. Cùng tìm hiểu cách thực hiện trong bài viết hôm nay nhé.
Table of Contents
1. Mở đầu
Ví dụ chia sẻ dữ liệu giữa các ứng dụng:
Chia sẻ ảnh giữa các ứng dụng
Ứng dụng Android có thể chia sẻ data giữa các ứng dụng dễ dàng. Dữ liệu được chia sẻ bao gồm text, image, video , aduio file ….. Ví dụ bạn có thẻ chia sẻ một image từ ứng dụng Google Photo tới ứng dụng Facebook hoặc ứng dụng Instagram. Ngày nay nó là một tính năng phổ biến trong các ứng dụng social trên Android.
2. Các bước thực hiện
Bước 1: Thêm trong AndroidManifest
Chúng ta add 4 tags tới Activity để xử lý data đang đến trong AndroidMainifest.xml. Chúng là:
Để nói rằng Activity này được áp dụng để xử lý hệ thống Intent với action và data được xác định tại các tag tương ứng là và 2. Định nghĩa IntentAction mà Activity này có thể xử lý. android.intent.action.SEND nhận về single data và android.intent.action.SENDMULTIPLE nhận về một list data. Trường action được sử dụng bởi hệ thống để lọc ra (filter) những ứng dụng mà sẵn sàng xử lý yêu cầu của Intent. android.intent.category.DEFAULT phải được định nghĩa tại* * nếu không thì Activity không thể nhận Intent không rõ dàng(implicit Intent) do đó không thể hiển thị tại dialog chia sẻ bên dưới. - ** ** Khai báo type của MINE( (Multipurpose Internet Mail Extensions) để Activity này chú ý. Có một vài loại phổ biến:
- text/ * cái này bao gồm text/plain, text/rtf, text/html, text/json
- image/ * cái này bao gồm image/jpg, image/png, image/gif
- video/ * cái này bao gồm video/mp4, video/3gp
- audio/ * cái này bao gồm audio/wav
- application/pdf * cái này bao gồm pdf file
Tại thời điểm này bạn có thể nhìn thấy icon ứng dụng của bạn suất hiện tại dialog sharing . Tiêu đề bôi đậm (bold) là tên ứng dụng và tiêu đề bên dưới là tên Activity được khai báo trong AndroidManifest.xml. Nhìn bên dưới:
Bước 2: Xử lý data tại Activity
class SharingActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sharing)
val isActivityLaunchedFromActionSend = intent?.action == Intent.ACTION_SEND
val isActivityLaunchedFromActionSendMultiple = intent?.action == Intent.ACTION_SEND_MULTIPLE
val isTextData = intent.type?.startsWith("text/") == true
val isImageData = intent.type?.startsWith("image/") == true
if (isActivityLaunchedFromActionSend && isTextData) {
// Session 1: Handle received text data
val sentString = intent.getStringExtra(Intent.EXTRA_TEXT)
fooTextView.text = sentString
} else if (isActivityLaunchedFromActionSend && isImageData) {
// Session 2: Handle received image data
val sentImageURI = intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri
fooImageView.setImageURI(sentImageURI)
} else if (isActivityLaunchedFromActionSendMultiple && isImageData) {
// Session 3: Handle received multiple image data
// Example of receiving 3 image URIs.
val imageURIList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) ?: arrayListOf()
fooImageView.setImageURI(imageURIList.get(0) as? Uri)
fooImageView2.setImageURI(imageURIList.get(1) as? Uri)
fooImageView3.setImageURI(imageURIList.get(2) as? Uri)
}
}
}
Sau khi click vào icon app tại dialog sharing, Activity được xác định của bạn sẽ chạy và được khởi tạo. Data đã được gửi (ví dụ text, image, videok audio URI…) có thể được lấy về từ Intent đang tới tại onCreate() với các gía trị key khác nhau. Trước khi tất cả bắt đầu, line (7-8) trong đoạn code trên là cần thiết để xác định rằng Intent được gửi đến từ ACTIONSEND or ACTIONSENDMULTIPLE Ngoài ra data mine type cũng lên được được kiểm tra để đảm bảo rằng đúng key và function được sử dụng sau để lấy về data đã được gửi
Tại line 14-15 text đã gửi có thể được lấy về từ key Intent.EXTRATEXT
val sentString = intent.getStringExtra(Intent.EXTRA_TEXT)
fooTextView.text = sentString
Tại line 20-21 URI của image đã gửi có thể được lấy về từ key Intent.EXTRASTREAM
val sentImageURI = intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri
fooImageView.setImageURI(sentImageURI)
Tại line 20-21 URI của nhiều image đã gửi có thể được lấy về từ key Intent.EXTRASTREAM nhưng với 1 function khác getParcelableArrayListExtra(key: String)
val imageURIList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) ?: arrayListOf()
fooImageView.setImageURI(imageURIList.get(0) as? Uri)
fooImageView2.setImageURI(imageURIList.get(1) as? Uri)
fooImageView3.setImageURI(imageURIList.get(2) as? Uri)
3. Tổng kết
- Activity phải được khai báo với để nói với hệ thống rằng Activity này có thể xử lý nhưng Intent nhất định với action và data được xác định tại các tag
và - android.intent.action.SEND or android.intent.action.SENDMULTIPLE lên được khai báo tại tag để nhận data từ các app khác.
- android.intent.category.DEFAULT phải được định nghĩa tại tag
để hiển thị app tại dialog sharing - MINE type được khai báo tại tag để nói với hệ thống loại data nào mà Activity này có thể xử lý ví dụ text/, image/……
- Cả IntentAction và data type phải được kiểm tra tại callback* onCreate()* của Activity cụ thể. Intent.EXTRATEXT được xử lỵ để lấy về text và Intent.EXTRASTREAM được xử dụng để lấy về image đã gửi
Bài viết trên được tham khảo từ nguồn: https://itnext.io/android-receiving-data-in-2-steps-21c49920172d
Cảm ơn các bạn đã đọc bài viết.
Chào thân ái và quyết thắng!
Theo:
https://viblo.asia