Android Content Provider – P1: Tổng quan, cách chia sẻ dữ liệu giữa 2 hoặc nhiều ứng dụng khác nhau

Content provider là gì

Android Content Provider - P1: Tổng quan, cách chia sẻ dữ liệu giữa 2 hoặc nhiều ứng dụng khác nhau

Trên nền tảng android, một ứng dụng không thể truy cập trực tiếp (đọc / ghi) dữ liệu của ứng dụng khác. Tất cả dữ liệu ứng dụng là riêng tư đối với ứng dụng đó. Mỗi ứng dụng có thư mục dữ liệu id riêng và vùng bộ nhớ được bảo vệ riêng. Điều này có nghĩa là một ứng dụng không thể truy vấn hoặc thao tác dữ liệu của ứng dụng khác. Tuy nhiên, nếu bạn muốn một ứng dụng có thể truy vấn hoặc thao tác dữ liệu của ứng dụng khác, bạn cần sử dụng khái niệm nhà cung cấp nội dung . Vì vậy, hãy xem nó diễn ra như thế nào!

Nhà cung cấp nội dung là một tập dữ liệu được gói gọn trong một api tùy chỉnh có thể đọc và viết. Nó hoạt động như một giao diện cho phép bạn lưu trữ và lấy dữ liệu từ kho dữ liệu (repositories). Nó cũng cho phép bạn chia sẻ dữ liệu giữa các ứng dụng khác nhau. Trình cung cấp nội dung tách lớp ứng dụng khỏi lớp dữ liệu bằng cách trừu tượng hóa nguồn dữ liệu bên dưới, do đó làm cho nguồn dữ liệu ứng dụng trở nên độc lập. Chúng cho phép kiểm soát quyền, cho phép các ứng dụng khác truy cập hoặc không truy cập vào nguồn lưu trữ dữ liệu, giúp việc chia sẻ dữ liệu trở nên dễ dàng. Tất nhiên, bất kỳ ứng dụng nào có quyền chính xác đều có thể thêm, xóa, cập nhật và truy xuất dữ liệu của ứng dụng khác, bao gồm cả dữ liệu trong một số cơ sở dữ liệu Android gốc.

Có hai loại nhà cung cấp nội dung:

  • Nhà cung cấp nội dung cục bộ: Họ cung cấp quyền truy cập vào cơ sở dữ liệu tích hợp sẵn như danh bạ, trình phát đa phương tiện, tin nhắn và các cơ sở dữ liệu cục bộ khác. Trước khi sử dụng nhà cung cấp nội dung gốc, bạn cần cấp các quyền cần thiết cho ứng dụng của mình
  • Nhà cung cấp nội dung tùy chỉnh: Cơ sở dữ liệu tùy chỉnh do nhà phát triển tạo ra để đáp ứng nhu cầu của ứng dụng.

Vì vậy, nhà cung cấp nội dung có thể được coi như một kho dữ liệu cho phép chia sẻ và trao đổi dữ liệu giữa các ứng dụng. Vậy làm cách nào để có thể kết nối hoặc sử dụng đối tượng nhà cung cấp nội dung này. Tiếp theo là khái niệm tiếp theo, chúng ta hãy tìm hiểu thêm.

Để nhận dữ liệu và tương tác với nhà cung cấp nội dung, các ứng dụng sử dụng đối tượng contentparser để gửi yêu cầu đến nhà cung cấp nội dung. Đối tượng contentresolver cung cấp các phương thức query (), insert (), update () và delete () để truy cập dữ liệu từ các nhà cung cấp nội dung. Mỗi yêu cầu bao gồm một truy vấn uri và sql, và phản hồi được trả về sẽ là một đối tượng con trỏ. Để biết thêm chi tiết, chúng ta hãy xem hình dưới đây:

Android Content Provider - P1: Tổng quan, cách chia sẻ dữ liệu giữa 2 hoặc nhiều ứng dụng khác nhau

Một ví dụ đơn giản. Vấn đề của chúng ta bây giờ là: tạo một ứng dụng (a) chỉ để lưu trữ dữ liệu về tất cả các món ăn ngon, phổ biến và được sử dụng nhiều nhất hiện nay. Ứng dụng này không có giao diện nào cả. Chỉ là nơi lưu trữ dữ liệu. 2 ứng dụng khác sau đó đã được tạo ra, 1 ứng dụng là từ điển các món ăn và 1 ứng dụng đặt hàng từ một nhà hàng. Vấn đề của chúng ta rất đơn giản, cả hai ứng dụng trên sẽ truy cập ứng dụng (a) lưu trữ dữ liệu để tìm kiếm dữ liệu liên quan đến từng ứng dụng.

Nhà cung cấp nội dung hữu ích cho các ứng dụng muốn cung cấp dữ liệu cho các ứng dụng khác.

  • Một nhà cung cấp nội dung cho phép bạn cho phép nhiều ứng dụng khác truy cập, sử dụng và sửa đổi một nguồn dữ liệu duy nhất do ứng dụng của bạn cung cấp. (Ví dụ ở trên)
  • Để kiểm soát quyền truy cập, bạn có thể chỉ định quyền cho nhà cung cấp nội dung để chỉ định cách các ứng dụng khác có thể truy cập dữ liệu. Ví dụ: một nhà hàng có thể không được phép thay đổi dữ liệu thông tin món ăn không do họ cung cấp.
  • Bạn có thể lưu trữ dữ liệu độc lập với ứng dụng do nhà cung cấp nội dung giữa giao diện người dùng và nơi lưu trữ dữ liệu. Bạn có thể thay đổi cách dữ liệu được lưu trữ mà không cần thay đổi mã chương trình.
  • Một lợi ích khác của việc sử dụng nhà cung cấp nội dung để tách dữ liệu khỏi giao diện người dùng là nhóm phát triển có thể làm việc độc lập với giao diện người dùng và lưu trữ dữ liệu của ứng dụng. Đối với các ứng dụng lớn và phức tạp, giao diện người dùng và phần phụ trợ dữ liệu thường được phát triển bởi các nhóm khác nhau và chúng thậm chí có thể là các ứng dụng riêng biệt.

Trình cung cấp nội dung là lớp giữa phần lưu trữ dữ liệu của ứng dụng cung cấp nội dung và phần còn lại của ứng dụng, tách dữ liệu khỏi giao diện. Để cung cấp cho bạn ý tưởng về kiến ​​trúc tổng thể của nhà cung cấp nội dung, phần này trình bày và tóm tắt tất cả các phần của kiến ​​trúc nhà cung cấp nội dung đã triển khai như chi tiết bên dưới:

Android Content Provider - P1: Tổng quan, cách chia sẻ dữ liệu giữa 2 hoặc nhiều ứng dụng khác nhau

1. Hỗ trợ dữ liệu và mở

Lưu trữ dữ liệu. Dữ liệu có thể nằm trong cơ sở dữ liệu, tệp, trên Internet, được tạo động hoặc thậm chí là sự kết hợp của những thứ này. Ví dụ: nếu bạn có ứng dụng từ điển, từ điển cơ sở có thể được lưu trữ trong cơ sở dữ liệu sqlite trên thiết bị của người dùng. Nếu ghi chú hoặc chủ đề không có trong cơ sở dữ liệu, nó có thể được truy xuất từ ​​internet và nếu truy xuất không thành công, ứng dụng có thể yêu cầu người dùng định nghĩa hoặc kiểm tra ngữ pháp.

Dữ liệu được sử dụng với các nhà cung cấp nội dung thường được lưu trữ trong cơ sở dữ liệu sqlite và các API của nhà cung cấp nội dung.

2. Hợp đồng

hợp đồng là một lớp công khai hiển thị thông tin quan trọng về nhà cung cấp nội dung cho các ứng dụng khác. Điều này thường bao gồm lược đồ uri, hằng số khóa và cấu trúc của dữ liệu được trả về. Ví dụ: đối với ứng dụng từ điển món ăn, hợp đồng có thể hiển thị các tên cột chứa giá và tên sản phẩm và một tiểu để truy xuất các món ăn theo tên hoặc id.

3. Nhà cung cấp nội dung

trình cung cấp nội dung mở rộng lớp trình cung cấp nội dung và cung cấp các phương thức truy vấn (), insert (), update () và delete () để truy cập dữ liệu. Ngoài ra, nó cung cấp giao diện công khai giao diện an toàn cho dữ liệu để các ứng dụng khác có thể truy cập dữ liệu với các quyền thích hợp. Ví dụ: để lấy thông tin món ăn từ cơ sở dữ liệu của ứng dụng, ứng dụng từ điển sẽ kết nối với trình cung cấp nội dung thay vì kết nối trực tiếp với cơ sở dữ liệu, vì điều này không được phép.

Dữ liệu của riêng ứng dụng chỉ định các quyền (quyền) mà các ứng dụng khác cần để hoạt động với nhà cung cấp nội dung. Ví dụ: nếu bạn có một ứng dụng cung cấp thông tin về món lẩu cho một nhà hàng kinh doanh, thì ứng dụng của bạn sẽ sở hữu dữ liệu và xác định quyền truy cập của các ứng dụng khác vào dữ liệu. Quyền được chỉ định trong tệp kê khai android.

4. Trình phân tích cú pháp nội dung

Các nhà cung cấp nội dung luôn được truy cập thông qua trình phân giải nội dung. Hãy nghĩ về trình phân tích cú pháp nội dung như một lớp trợ giúp quản lý tất cả các chi tiết của việc kết nối với nhà cung cấp nội dung cho bạn. Sao chép api của nhà cung cấp nội dung, đối tượng contentresolver cung cấp cho bạn các phương thức query (), insert (), update () và delete () để truy cập vào dữ liệu của nhà cung cấp nội dung. Ví dụ: để lấy tất cả các món lẩu, ứng dụng Từ điển Món ăn sẽ tạo một truy vấn lẩu và gửi truy vấn đó đến nhà cung cấp nội dung bằng trình phân tích cú pháp nội dung.

Theo thông tin trên, hãy triển khai nhà cung cấp nội dung bạn cần:

  • Dữ liệu trong cơ sở dữ liệu
  • Một phương pháp truy cập kho dữ liệu, ví dụ, thông qua cơ sở dữ liệu Open Assistant của cơ sở dữ liệu.
  • Xác định, khai báo nhà cung cấp nội dung của bạn trong tệp kê khai android để chính bạn và các ứng dụng khác sử dụng.
  • Lớp con (xây dựng) dự phòng) Lớp trình cung cấp nội dung thực hiện các phương thức query (), insert (), delete (), update (), count () và gettype ().
  • public contract Lớp hiển thị uris lược đồ, tên bảng, kiểu mime và các hằng số quan trọng khác cho các lớp và ứng dụng. Mặc dù điều này là tùy chọn, nhưng nếu không có nó, các ứng dụng khác sẽ không thể biết cách truy cập nhà cung cấp nội dung của bạn.
  • Trình phân tích cú pháp nội dung sử dụng các phương pháp, công thức và truy vấn thích hợp để truy cập các nhà cung cấp nội dung.

Xong, công việc chuẩn bị đã xong và trong phần tiếp theo, tôi sẽ hướng dẫn bạn từng bước chi tiết để tạo một ứng dụng hoàn chỉnh để sử dụng với các nhà cung cấp nội dung. Hẹn gặp lại các bạn trong lần sau!

Tham khảo

  • https://developer.android.com/guide/topics/providers/content-provider-basics?hl=vi
  • https://android-delight.blogspot.com/ 2016/07 / how-to-sharing-data-between-apps-using.html
  • https://google-developer-training.gitbooks.io/android-developer-fundamentals-course-concept/ content / en / unit 4 / 111_c_share_data_through_content_providers.html