Tạo ứng dụng ghi chú

Ghi chú là một chức năng cốt lõi của Android giúp tăng năng suất của người dùng trên thiết bị có màn hình lớn. Ứng dụng ghi chú cho phép người dùng viết và phác thảo một cửa sổ nổi hoặc trên toàn màn hình, ghi lại và chú thích nội dung trên màn hình, và lưu ghi chú để xem lại và sửa đổi sau.

Người dùng có thể truy cập vào ứng dụng ghi chú từ màn hình khoá hoặc khi đang chạy của chúng tôi.

Tính năng hỗ trợ ghi chú bằng bút cảm ứng mang lại trải nghiệm ấn tượng cho người dùng.

Vai trò ghi chú

Chiến lược phát hành đĩa đơn RoleManager.ROLE_NOTES vai trò xác định ứng dụng ghi chú và cấp cho chúng LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE quyền.

Để lấy vai trò ghi chú cho ứng dụng, hãy làm như sau:

  1. Gọi isRoleAvailable() để kiểm tra trạng thái của vai trò.
  2. Nếu có vai trò ghi chú, hãy gọi createRequestRoleIntent() để lấy ý định dành riêng cho ghi chú.
  3. Gọi startActivityForResult() với mục đích ghi chú để nhắc người dùng cấp vai trò ghi chú cho .

Chỉ một ứng dụng có thể sở hữu vai trò ghi chú.

Ứng dụng sẽ mở ra để phản hồi một lệnh ngầm ẩn ACTION_CREATE_NOTE thao tác theo ý định. Nếu được gọi từ màn hình khoá của thiết bị, ứng dụng sẽ mở ở chế độ toàn màn hình màn hình; nếu được gọi trong khi màn hình đang mở khoá trong một cửa sổ nổi.

Tệp kê khai ứng dụng

Để đủ điều kiện sử dụng vai trò ghi chú, ứng dụng của bạn phải đưa ra nội dung khai báo sau trong tệp kê khai ứng dụng:

<activity
    android:name="YourActivityName"
    android:exported="true"
    android:showWhenLocked="true"
    android:turnScreenOn="true">
    <intent-filter>
        <action android:name="android.intent.action.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Phần khai báo cho phép người dùng chỉ định vai trò ghi chú cho ứng dụng của bạn, giúp ứng dụng ứng dụng ghi chú mặc định:

  • ACTION_CREATE_NOTE đặt thao tác theo ý định mà ứng dụng của bạn phản hồi

  • showWhenLocked giúp người dùng truy cập vào ứng dụng của bạn từ màn hình khoá của thiết bị

  • turnScreenOn bật ứng dụng của bạn để bật màn hình thiết bị khi ứng dụng đó chạy

Tính năng của ứng dụng

Một ứng dụng ghi chú khác biệt trên màn hình lớn cung cấp đầy đủ về khả năng ghi chú.

Hỗ trợ bút cảm ứng

Khi ứng dụng của bạn được gọi bằng EXTRA_USE_STYLUS_MODE ý định bổ sung được đặt thành true, ứng dụng sẽ mở một ghi chú chấp nhận bút cảm ứng (hoặc chạm bằng ngón tay).

Nếu ý định bổ sung được đặt thành false, ứng dụng của bạn sẽ mở một ghi chú chấp nhận nhập bằng bàn phím.

Truy cập vào màn hình khoá

Ứng dụng của bạn phải cung cấp một hoạt động toàn màn hình. Hoạt động này sẽ chạy khi ứng dụng đó đã mở từ màn hình khoá của thiết bị.

Ứng dụng của bạn chỉ nên hiển thị các ghi chú trước đây nếu người dùng đã đồng ý (trong trạng thái thiết bị đã mở khoá) để hiển thị các ghi chú trước đây. Nếu không, khi mở từ màn hình khoá, ứng dụng của bạn sẽ luôn tạo một ghi chú mới.

Bạn có thể dùng để kiểm tra xem ứng dụng của mình có được chạy từ màn hình khoá hay không bằng KeyguardManager#isKeyguardLocked(). Để yêu cầu người dùng xác thực và mở khoá thiết bị, hãy gọi KeyguardManager#requestDismissKeyguard():

val keyguardManager =
getSystemService(KEYGUARD_SERVICE) as KeyguardManager
keyguardManager.requestDismissKeyguard(  this, object :
KeyguardDismissCallback() {  override fun onDismissError() {  // Unlock failed.
Dismissing keyguard is not feasible.  }  override fun onDismissSucceeded() {  //
Unlock succeeded. Device is now unlocked.  }  override fun onDismissCancelled()
{  // Unlock failed. User cancelled operation or request otherwise cancelled.  }
 } )

Cửa sổ nổi

Đối với ghi chú theo ngữ cảnh, ứng dụng của bạn phải cung cấp một hoạt động mở trong một cửa sổ nổi khi một ứng dụng khác đang chạy.

Ứng dụng của bạn phải hỗ trợ multi-instance để người dùng có thể tạo nhiều ghi chú trong nhiều cửa sổ nổi khi chạy ứng dụng ghi chú ở chế độ toàn màn hình hoặc chia đôi màn hình .

Ghi lại nội dung

Ghi lại nội dung là một chức năng chính của ứng dụng ghi chú. Có nội dung chụp, người dùng có thể chụp ảnh màn hình phía sau phần ghi chú cửa sổ nổi của ứng dụng. Người dùng có thể chụp toàn bộ hoặc một phần màn hình, dán nội dung vào ghi chú của họ và chú thích hoặc đánh dấu nội dung đã ghi.

Ứng dụng ghi chú của bạn phải cung cấp một thuộc tính tương tác trên giao diện người dùng giúp khởi chạy một ActivityResultLauncher được tạo bởi registerForActivityResult(). Chiến lược phát hành đĩa đơn ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE thao tác theo ý định được cung cấp cho trình chạy một cách trực tiếp hoặc thông qua ActivityResultContract.

Một hoạt động của hệ thống sẽ ghi lại nội dung, lưu nội dung này trên thiết bị và trả về URI nội dung cho ứng dụng của bạn trong đối số gọi lại của registerForActivityResult().

Ví dụ sau đây sử dụng một thuộc tính chung StartActivityForResult hợp đồng:

private val startForResult =
registerForActivityResult(  ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?.data  // Use
the URI to paste the captured content into the note.  }  } override fun
onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)
setContent {  NotesTheme {  Surface(color =
MaterialTheme.colorScheme.background) {  CaptureButton(  onClick = {
Log.i("ContentCapture", "Launching intent...")
startForResult.launch(Intent(ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE))
})  }  }  } } @Composable fun CaptureButton(onClick: () -> Unit) {
Button(onClick = onClick)
 {Text("Capture Content")} }

Ứng dụng của bạn phải xử lý tất cả các mã kết quả:

Khi hệ thống ghi xong nội dung, hãy dán hình ảnh đã chụp vào ghi chú để ví dụ:

registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?data  // Use
the URI to paste the captured content into the note.  } }

Tính năng ghi lại nội dung chỉ nên hiển thị thông qua một thuộc tính tương tác trên giao diện người dùng khi ứng dụng ghi chú của bạn đang chạy trong một cửa sổ nổi chứ không phải khi chạy ở chế độ toàn màn hình, khởi chạy từ màn hình khoá của thiết bị. (Người dùng có thể thực hiện ảnh chụp màn hình của chính ứng dụng ghi chú đó cùng với ảnh chụp màn hình của thiết bị năng lực khác.)

Để xác định xem ứng dụng của bạn có đang ở cửa sổ nổi (hoặc bong bóng trò chuyện) hay không, hãy gọi phương thức các phương thức sau:

  • isLaunchedFromBubble() để kiểm tra nhằm đảm bảo rằng ứng dụng ghi chú của bạn không chạy ở chế độ toàn màn hình từ màn hình khoá của thiết bị
  • isRoleHeld(RoleManager.ROLE_NOTES) để xác minh rằng ứng dụng của bạn là ứng dụng ghi chú mặc định (ứng dụng của bạn có thể chạy trong một cuộc trò chuyện hoặc loại bong bóng trò chuyện khác nếu ứng dụng không giữ vai trò ghi chú)

Tài nguyên khác