<nhà cung cấp>

cú pháp:
<provider android:authorities="list"
          android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string" >
    ...
</provider>
có trong:
<application>
có thể chứa:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
mô tả:
Khai báo thành phần của nhà cung cấp nội dung. Trình cung cấp nội dung là một lớp con của ContentProvider cung cấp quyền truy cập có cấu trúc vào dữ liệu do ứng dụng quản lý. Mọi trình cung cấp nội dung trong ứng dụng của bạn đều phải được xác định trong phần tử <provider> của tệp kê khai. Nếu không, hệ thống sẽ không nhận ra và không chạy các trình cung cấp đó.

Chỉ khai báo trình cung cấp nội dung thuộc ứng dụng của bạn. Đừng khai báo trình cung cấp nội dung trong các ứng dụng khác mà bạn dùng trong ứng dụng đó.

Hệ thống Android lưu trữ các tệp tham chiếu đến trình cung cấp nội dung theo chuỗi đơn vị quản lý, một phần trong URI nội dung của trình cung cấp. Ví dụ: giả sử bạn muốn truy cập vào trình cung cấp nội dung lưu trữ thông tin về chuyên gia chăm sóc sức khoẻ. Để thực hiện việc này, bạn sẽ gọi phương thức ContentResolver.query(). Phương thức này sẽ nhận một URI xác định trình cung cấp, ngoài các đối số khác:

content://com.example.project.healthcareprovider/nurses/rn

Giao thức content: xác định URI là một URI nội dung trỏ đến một trình cung cấp nội dung Android. Đơn vị quản lý com.example.project.healthcareprovider xác định chính trình cung cấp đó. Hệ thống Android tra cứu đơn vị quản lý trong danh sách trình cung cấp đã biết và đơn vị quản lý tương ứng. Chuỗi con nurses/rn là một đường dẫn mà trình cung cấp nội dung dùng để xác định các tập hợp con của dữ liệu trình cung cấp.

Khi xác định trình cung cấp trong phần tử <provider>, bạn không được đưa giao thức hoặc đường dẫn đó vào đối số android:name mà chỉ đưa đơn vị quản lý vào.

Để biết thông tin về cách sử dụng và phát triển trình cung cấp nội dung, hãy xem bài viết Trình cung cấp nội dung.

thuộc tính:
android:authorities
Danh sách một hoặc nhiều đơn vị quản lý URI xác định dữ liệu do trình cung cấp nội dung cung cấp. Liệt kê nhiều đơn vị quản lý bằng cách dùng dấu chấm phẩy phân tách tên của đơn vị quản lý. Để tránh xung đột, hãy dùng quy ước đặt tên kiểu Java cho tên của đơn vị quản lý, chẳng hạn như com.example.provider.cartoonprovider. Thông thường, đó là tên của lớp con ContentProvider triển khai trình cung cấp

Không có giá trị mặc định. Bạn phải chỉ định ít nhất một đơn vị quản lý.

android:enabled
Liệu hệ thống có thể tạo thực thể cho trình cung cấp nội dung hay không. Giá trị này sẽ là "true" nếu có thể và "false" nếu không thể. Giá trị mặc định là "true".

Phần tử <application> có thuộc tính enabled riêng áp dụng cho mọi thành phần của ứng dụng, bao gồm cả trình cung cấp nội dung. Cả hai thuộc tính <application><provider> đều phải có giá trị "true", vì cả hai đều được bật trình cung cấp nội dung theo mặc định. Nếu giá trị là "false", thì trình cung cấp sẽ bị vô hiệu hoá. Không thể tạo thực thể.

android:directBootAware

Liệu trình cung cấp nội dung có nhận biết khi khởi động trực tiếp hay không – tức là trình cung cấp đó có thể chạy trước khi người dùng mở khoá thiết bị không.

Lưu ý: Trong phương thức Direct Boot (Khởi động trực tiếp), trình cung cấp nội dung trong ứng dụng của bạn chỉ có thể truy cập vào dữ liệu được lưu trữ trong bộ nhớ được bảo vệ của thiết bị.

Giá trị mặc định là "false".

android:exported
Liệu các ứng dụng khác có dùng được trình cung cấp nội dung hay không.
  • "true": các ứng dụng khác dùng được trình cung cấp này. Mọi ứng dụng đều có thể dùng URI nội dung của trình cung cấp để truy cập, tuỳ thuộc vào các quyền được chỉ định cho trình cung cấp này.
  • "false": các ứng dụng khác không dùng được trình cung cấp này. Đặt android:exported="false" để chỉ cho phép các ứng dụng của bạn truy cập vào trình cung cấp này. Chỉ những ứng dụng có cùng mã nhận dạng người dùng (UID) với trình cung cấp này, hoặc các ứng dụng tạm thời được cấp quyền truy cập vào trình cung cấp này thông qua phần tử android:grantUriPermissions mới có quyền truy cập.

Vì thuộc tính này được ra mắt trong API cấp 17, nên mọi thiết bị chạy API cấp 16 trở xuống đều hoạt động như thể bạn đã đặt thuộc tính này là "true". Nếu bạn đặt android:targetSdkVersion thành 17 trở lên, thì giá trị mặc định sẽ là "false" đối với thiết bị chạy API cấp 17 trở lên.

Bạn có thể đặt android:exported="false" mà vẫn giới hạn quyền truy cập vào trình cung cấp của mình bằng cách đặt các quyền bằng thuộc tính permission.

android:grantUriPermissions
Cho dù những người dùng thường không có quyền truy cập vào dữ liệu của trình cung cấp nội dung vẫn có thể được cấp quyền truy cập, hãy tạm thời khắc phục những hạn chế do thuộc tính readPermission, writePermission, permissionexported đặt ra.

Giá trị sẽ là "true" nếu có thể cấp quyền và "false" nếu không thể. Nếu giá trị là "true", bạn có thể cấp quyền cho bất kỳ dữ liệu nào của trình cung cấp nội dung. Nếu giá trị là "false", bạn chỉ có thể cấp quyền cho những tập hợp con dữ liệu được liệt kê trong các phần tử con <grant-uri-permission>, nếu có. Giá trị mặc định là "false".

Cấp quyền là phương thức cấp cho một thành phần của ứng dụng quyền truy cập một lần vào dữ liệu được bảo vệ bằng quyền. Ví dụ: khi một thư email có chứa tệp đính kèm, ứng dụng thư có thể kêu gọi người xem thích hợp mở tệp đó, ngay cả khi người xem không có quyền chung để xem tất cả dữ liệu của trình cung cấp nội dung.

Trong những trường hợp như vậy, quyền sẽ được cấp bằng cờ FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION trong đối tượng Intent kích hoạt thành phần đó. Ví dụ: ứng dụng thư có thể đặt FLAG_GRANT_READ_URI_PERMISSION trong Intent được chuyển cho Context.startActivity(). Quyền này dành riêng cho URI trong Intent.

Nếu bạn bật tính năng này, bằng cách đặt thuộc tính này thành "true" hoặc bằng cách xác định các phần tử con <grant-uri-permission>, hãy gọi Context.revokeUriPermission() khi một URI ở trong cùng bị xoá khỏi trình cung cấp.

Xem thêm phần tử <grant-uri-permission>.

android:icon
Biểu tượng thể hiện trình cung cấp nội dung. Thuộc tính này được đặt làm tham chiếu đến một tài nguyên có thể vẽ và chứa định nghĩa hình ảnh. Nếu bạn không đặt thuộc tính này, hệ thống sẽ dùng biểu tượng được chỉ định cho toàn bộ ứng dụng. Để biết thêm thông tin, hãy xem thuộc tính icon của phần tử <application>.
android:initOrder
Thứ tự tạo thực thể cho trình cung cấp nội dung, so với các trình cung cấp nội dung khác lưu trữ trong cùng một quy trình. Khi có các phần phụ thuộc giữa các trình cung cấp nội dung, việc đặt thuộc tính này cho từng trình cung cấp sẽ đảm bảo rằng thuộc tính được tạo theo thứ tự bắt buộc của các phần phụ thuộc đó. Giá trị là một số nguyên, số nào cao hơn sẽ được khởi động trước.
android:label
Nhãn mà người dùng đọc được cho nội dung bạn cung cấp. Nếu bạn không đặt thuộc tính này, nhãn được đặt chung cho ứng dụng sẽ được dùng. Để biết thêm thông tin, hãy xem thuộc tính label của phần tử <application>.

Nhãn thường được đặt làm tham chiếu đến tài nguyên chuỗi để có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng. Tuy nhiên, để thuận tiện trong quá trình phát triển ứng dụng, bạn cũng có thể đặt nhãn này làm chuỗi thô.

android:multiprocess
Nếu ứng dụng chạy trong nhiều quá trình, thuộc tính này sẽ xác định xem có nhiều phiên bản của nhà cung cấp nội dung được tạo hay không. Nếu là "true", mỗi quy trình của ứng dụng sẽ có đối tượng nhà cung cấp nội dung riêng. Nếu "false", các quy trình của ứng dụng chỉ chia sẻ một đối tượng nhà cung cấp nội dung. Giá trị mặc định là "false".

Việc đặt cờ này thành "true" có thể cải thiện hiệu suất bằng cách giảm mức hao tổn giao tiếp liên quy trình, nhưng cũng làm tăng mức sử dụng bộ nhớ của mỗi quy trình.

android:name
Tên của lớp triển khai trình cung cấp nội dung, một lớp con của ContentProvider. Tên này thường là tên lớp đủ điều kiện, chẳng hạn như "com.example.project.TransportationProvider". Tuy nhiên, ở dạng viết tắt, nếu ký tự đầu tiên của tên là một dấu chấm, thì hệ thống sẽ nối thêm tên gói được chỉ định trong phần tử <manifest>.

Không có giá trị mặc định. Bạn phải chỉ định tên.

android:permission
Tên của một quyền mà ứng dụng khách phải đọc hoặc ghi dữ liệu của nhà cung cấp nội dung. Thuộc tính này là một cách thuận tiện để đặt một quyền duy nhất cho cả chế độ đọc và ghi. Tuy nhiên, các thuộc tính readPermission, writePermissiongrantUriPermissions sẽ được ưu tiên hơn lựa chọn này.

Nếu bạn cũng đặt thuộc tính readPermission, thuộc tính này sẽ kiểm soát quyền truy cập để truy vấn trình cung cấp nội dung. Nếu bạn đặt thuộc tính writePermission, thuộc tính này sẽ kiểm soát quyền truy cập để sửa đổi dữ liệu của trình cung cấp.

Để biết thêm thông tin về các quyền, hãy xem phần Quyền trên trang tổng quan về tệp kê khai ứng dụng và bài viết Mẹo bảo mật.

android:process
Tên của quy trình mà trình cung cấp nội dung chạy. Thường thì tất cả thành phần của ứng dụng sẽ chạy trong quy trình mặc định được tạo cho ứng dụng. Quy trình này có cùng tên với gói ứng dụng.

Thuộc tính process của phần tử <application> có thể đặt một giá trị mặc định khác cho mọi thành phần. Tuy nhiên, mỗi thành phần có thể ghi đè giá trị mặc định bằng thuộc tính process riêng, cho phép bạn trải rộng ứng dụng của mình trên nhiều quy trình.

Nếu tên gán cho thuộc tính này bắt đầu bằng dấu hai chấm (:), thì một quy trình mới (dành riêng cho ứng dụng) sẽ được tạo khi cần và hoạt động sẽ chạy trong quy trình đó.

Nếu tên quy trình bắt đầu bằng một ký tự viết thường, thì hoạt động sẽ chạy trong một quy trình chung của tên đó, miễn hoạt động có quyền làm vậy. Điều này cho phép các thành phần trong nhiều ứng dụng dùng chung một quy trình, qua đó giúp giảm mức sử dụng tài nguyên.

android:readPermission

Quyền mà ứng dụng phải có để truy vấn trình cung cấp nội dung.

Nếu nhà cung cấp đặt android:grantUriPermissions thành "true" hoặc nếu một ứng dụng khách cụ thể đáp ứng các điều kiện của phần tử con <grant-uri-permission>, thì ứng dụng có thể nhận được quyền đọc tạm thời đối với dữ liệu của nhà cung cấp nội dung.

Hãy xem thêm thuộc tính permissionwritePermission.

android:syncable
Liệu có thể đồng bộ hoá dữ liệu thuộc quyền kiểm soát của trình cung cấp nội dung với dữ liệu trên máy chủ hay không. Giá trị này sẽ là "true" nếu có thể và "false" nếu không thể.
android:writePermission

Quyền mà ứng dụng cần để thực hiện thay đổi đối với dữ liệu do trình cung cấp nội dung kiểm soát.

Nếu trình cung cấp này đặt android:grantUriPermissions thành "true" hoặc nếu một ứng dụng cụ thể đáp ứng các điều kiện của phần tử con <grant-uri-permission>, thì ứng dụng đó có thể nhận được quyền ghi tạm thời để sửa đổi dữ liệu của trình cung cấp nội dung.

Ngoài ra, hãy xem thuộc tính permissionreadPermission.

ra mắt từ:
API cấp 1
xem thêm:
Trình cung cấp nội dung