Ведение заметок — это основная функция Android, которая повышает производительность пользователей на устройствах с большим экраном. Приложения для ведения заметок позволяют пользователям писать и рисовать в плавающем окне или в полноэкранном режиме, захватывать и комментировать содержимое экрана, а также сохранять заметки для последующего просмотра и редактирования.
Пользователи могут получить доступ к приложениям для создания заметок с экрана блокировки или во время запуска других приложений.
Поддержка стилуса для создания заметок обеспечивает исключительный пользовательский опыт.
Роль заметок
 Роль RoleManager.ROLE_NOTES определяет приложения для создания заметок и предоставляет им разрешение LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE .
Чтобы получить роль заметок для вашего приложения, выполните следующие действия:
-  Вызовите isRoleAvailable(), чтобы проверить статус роли.
-  Если роль примечаний доступна, вызовите createRequestRoleIntent(), чтобы получить намерение, специфичное для примечаний.
-  Вызовите startActivityForResult()с намерением примечаний, чтобы предложить пользователю предоставить роль примечаний вашему приложению.
Только одно приложение может выполнять роль заметок.
 Приложение открывается в ответ на неявное действие намерения ACTION_CREATE_NOTE . При вызове с экрана блокировки устройства приложение открывается в полноэкранном режиме; если он вызывается, когда экран разблокирован, в плавающем окне.
Манифест приложения
Чтобы претендовать на роль заметок, ваше приложение должно включить в манифест приложения следующее объявление:
<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>
Объявление позволяет пользователям назначать вашему приложению роль заметок, делая его приложением для создания заметок по умолчанию:
- ACTION_CREATE_NOTEустанавливает намеренное действие, на которое реагирует ваше приложение.
- showWhenLockedделает ваше приложение доступным с экрана блокировки устройства.
- turnScreenOnпозволяет вашему приложению включать экран устройства при запуске приложения.
Возможности приложения
Приложение для создания заметок с большим экраном предоставляет полный набор возможностей для создания заметок.
Поддержка стилуса
 Когда ваше приложение вызывается с дополнительным намерением EXTRA_USE_STYLUS_MODE , установленным в значение true , приложение должно открыть заметку, которая принимает ввод стилусом (или касанием пальца).
 Если для дополнительного намерения установлено значение false , ваше приложение должно открыть заметку, которая принимает ввод с клавиатуры.
Доступ к экрану блокировки
Ваше приложение должно обеспечивать полноэкранное действие, которое запускается при открытии приложения с экрана блокировки устройства.
Ваше приложение должно отображать только исторические заметки, если пользователь дал согласие (в состоянии разблокированного устройства) на показ прошлых заметок. В противном случае при открытии с экрана блокировки ваше приложение всегда должно создавать новую заметку.
 Вы можете проверить, было ли запущено ваше приложение с экрана блокировки, с помощью KeyguardManager#isKeyguardLocked() . Чтобы попросить пользователя аутентифицировать и разблокировать устройство, вызовите 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.  }
 } )
Плавающие окна
Для контекстного ведения заметок ваше приложение должно предоставить действие, которое открывается в плавающем окне при запуске другого приложения.
 Ваше приложение должно поддерживать режим multi-instance , чтобы пользователи могли создавать несколько заметок в нескольких плавающих окнах, даже если ваше приложение для создания заметок запущено в полноэкранном режиме или в режиме разделенного экрана.
Захват контента
Захват контента — ключевая возможность приложений для создания заметок. Благодаря захвату контента пользователи могут делать снимки экрана за плавающим окном приложения для создания заметок. Пользователи могут захватывать все или часть отображения, вставлять содержимое в свою заметку, а также комментировать или выделять захваченное содержимое.
 Ваше приложение для заметок должно предоставлять возможность пользовательского интерфейса, который запускает ActivityResultLauncher , созданный с помощью registerForActivityResult() . Действие намерения ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE предоставляется средству запуска либо напрямую, либо через ActivityResultContract .
 Системное действие захватывает контент, сохраняет его на устройстве и возвращает URI контента вашему приложению в аргументе обратного вызова метода registerForActivityResult() .
 В следующем примере используется универсальный контракт StartActivityForResult : 
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")} }
Ваше приложение должно обрабатывать все коды результатов:
-  CAPTURE_CONTENT_FOR_NOTE_SUCCESS
-  CAPTURE_CONTENT_FOR_NOTE_FAILED
-  CAPTURE_CONTENT_FOR_NOTE_USER_CANCELED
-  CAPTURE_CONTENT_FOR_NOTE_WINDOW_MODE_UNSUPPORTED
-  CAPTURE_CONTENT_FOR_NOTE_BLOCKED_BY_ADMIN
После успешного захвата контента вставьте захваченное изображение в заметку, например:
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.  } }
Функция захвата контента должна быть доступна через возможности пользовательского интерфейса только тогда, когда ваше приложение для создания заметок работает в плавающем окне, а не при работе в полноэкранном режиме, запускаемом с экрана блокировки устройства. (Пользователи могут делать снимки экрана самого приложения для создания заметок с помощью функций создания снимков экрана устройства.)
Чтобы определить, находится ли ваше приложение в плавающем окне (или пузырьке), вызовите следующие методы:
-  isLaunchedFromBubble()чтобы убедиться, что приложение для создания заметок не запускалось в полноэкранном режиме с экрана блокировки устройства.
-  isRoleHeld(RoleManager.ROLE_NOTES)чтобы убедиться, что ваше приложение является приложением для создания заметок по умолчанию (ваше приложение может работать в диалоге или другом типе пузырька, если приложение не выполняет роль заметок).
Дополнительные ресурсы
,Ведение заметок — это основная функция Android, которая повышает производительность пользователей на устройствах с большим экраном. Приложения для ведения заметок позволяют пользователям писать и рисовать в плавающем окне или в полноэкранном режиме, захватывать и комментировать содержимое экрана, а также сохранять заметки для последующего просмотра и редактирования.
Пользователи могут получить доступ к приложениям для создания заметок с экрана блокировки или во время запуска других приложений.
Поддержка стилуса для создания заметок обеспечивает исключительный пользовательский опыт.
Роль заметок
 Роль RoleManager.ROLE_NOTES определяет приложения для создания заметок и предоставляет им разрешение LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE .
Чтобы получить роль заметок для вашего приложения, выполните следующие действия:
-  Вызовите isRoleAvailable(), чтобы проверить статус роли.
-  Если роль примечаний доступна, вызовите createRequestRoleIntent(), чтобы получить намерение, специфичное для примечаний.
-  Вызовите startActivityForResult()с намерением примечаний, чтобы предложить пользователю предоставить роль примечаний вашему приложению.
Только одно приложение может выполнять роль заметок.
 Приложение открывается в ответ на неявное действие намерения ACTION_CREATE_NOTE . При вызове с экрана блокировки устройства приложение открывается в полноэкранном режиме; если он вызывается, когда экран разблокирован, в плавающем окне.
Манифест приложения
Чтобы претендовать на роль заметок, ваше приложение должно включить в манифест приложения следующее объявление:
<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>
Объявление позволяет пользователям назначать вашему приложению роль заметок, делая его приложением для создания заметок по умолчанию:
- ACTION_CREATE_NOTEустанавливает намеренное действие, на которое реагирует ваше приложение.
- showWhenLockedделает ваше приложение доступным с экрана блокировки устройства.
- turnScreenOnпозволяет вашему приложению включать экран устройства при запуске приложения.
Возможности приложения
Приложение для создания заметок с большим экраном предоставляет полный набор возможностей для создания заметок.
Поддержка стилуса
 Когда ваше приложение вызывается с дополнительным намерением EXTRA_USE_STYLUS_MODE , установленным в значение true , приложение должно открыть заметку, которая принимает ввод стилусом (или касанием пальца).
 Если для дополнительного намерения установлено значение false , ваше приложение должно открыть заметку, которая принимает ввод с клавиатуры.
Доступ к экрану блокировки
Ваше приложение должно обеспечивать полноэкранное действие, которое запускается при открытии приложения с экрана блокировки устройства.
Ваше приложение должно отображать только исторические заметки, если пользователь дал согласие (в состоянии разблокированного устройства) на показ прошлых заметок. В противном случае при открытии с экрана блокировки ваше приложение всегда должно создавать новую заметку.
 Вы можете проверить, было ли запущено ваше приложение с экрана блокировки, с помощью KeyguardManager#isKeyguardLocked() . Чтобы попросить пользователя аутентифицировать и разблокировать устройство, вызовите 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.  }
 } )
Плавающие окна
Для контекстного ведения заметок ваше приложение должно предоставить действие, которое открывается в плавающем окне при запуске другого приложения.
 Ваше приложение должно поддерживать режим multi-instance , чтобы пользователи могли создавать несколько заметок в нескольких плавающих окнах, даже если ваше приложение для создания заметок запущено в полноэкранном режиме или в режиме разделенного экрана.
Захват контента
Захват контента — ключевая возможность приложений для создания заметок. Благодаря захвату контента пользователи могут делать снимки экрана за плавающим окном приложения для создания заметок. Пользователи могут захватывать все или часть отображения, вставлять содержимое в свою заметку, а также комментировать или выделять захваченное содержимое.
 Ваше приложение для заметок должно предоставлять возможность пользовательского интерфейса, который запускает ActivityResultLauncher , созданный с помощью registerForActivityResult() . Действие намерения ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE предоставляется средству запуска либо напрямую, либо через ActivityResultContract .
 Системное действие захватывает контент, сохраняет его на устройстве и возвращает URI контента вашему приложению в аргументе обратного вызова метода registerForActivityResult() .
 В следующем примере используется универсальный контракт StartActivityForResult : 
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")} }
Ваше приложение должно обрабатывать все коды результатов:
-  CAPTURE_CONTENT_FOR_NOTE_SUCCESS
-  CAPTURE_CONTENT_FOR_NOTE_FAILED
-  CAPTURE_CONTENT_FOR_NOTE_USER_CANCELED
-  CAPTURE_CONTENT_FOR_NOTE_WINDOW_MODE_UNSUPPORTED
-  CAPTURE_CONTENT_FOR_NOTE_BLOCKED_BY_ADMIN
После успешного захвата контента вставьте захваченное изображение в заметку, например:
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.  } }
Функция захвата контента должна быть доступна через возможности пользовательского интерфейса только тогда, когда ваше приложение для создания заметок работает в плавающем окне, а не при работе в полноэкранном режиме, запускаемом с экрана блокировки устройства. (Пользователи могут делать снимки экрана самого приложения для создания заметок с помощью функций создания снимков экрана устройства.)
Чтобы определить, находится ли ваше приложение в плавающем окне (или пузырьке), вызовите следующие методы:
-  isLaunchedFromBubble()чтобы убедиться, что приложение для создания заметок не запускалось в полноэкранном режиме с экрана блокировки устройства.
-  isRoleHeld(RoleManager.ROLE_NOTES)чтобы убедиться, что ваше приложение является приложением для создания заметок по умолчанию (ваше приложение может работать в диалоге или другом типе пузырька, если приложение не выполняет роль заметок).
Дополнительные ресурсы
,Ведение заметок — это основная функция Android, которая повышает производительность пользователей на устройствах с большим экраном. Приложения для ведения заметок позволяют пользователям писать и рисовать в плавающем окне или в полноэкранном режиме, захватывать и комментировать содержимое экрана, а также сохранять заметки для последующего просмотра и редактирования.
Пользователи могут получить доступ к приложениям для создания заметок с экрана блокировки или во время запуска других приложений.
Поддержка стилуса для создания заметок обеспечивает исключительный пользовательский опыт.
Роль заметок
 Роль RoleManager.ROLE_NOTES определяет приложения для создания заметок и предоставляет им разрешение LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE .
Чтобы получить роль заметок для вашего приложения, выполните следующие действия:
-  Вызовите isRoleAvailable(), чтобы проверить статус роли.
-  Если роль примечаний доступна, вызовите createRequestRoleIntent(), чтобы получить намерение, специфичное для примечаний.
-  Вызовите startActivityForResult()с намерением примечаний, чтобы предложить пользователю предоставить роль примечаний вашему приложению.
Только одно приложение может выполнять роль заметок.
 Приложение открывается в ответ на неявное действие намерения ACTION_CREATE_NOTE . При вызове с экрана блокировки устройства приложение открывается в полноэкранном режиме; если он вызывается, когда экран разблокирован, в плавающем окне.
Манифест приложения
Чтобы претендовать на роль заметок, ваше приложение должно включить в манифест приложения следующее объявление:
<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>
Объявление позволяет пользователям назначать вашему приложению роль заметок, делая его приложением для создания заметок по умолчанию:
- ACTION_CREATE_NOTEустанавливает намеренное действие, на которое реагирует ваше приложение.
- showWhenLockedделает ваше приложение доступным с экрана блокировки устройства.
- turnScreenOnпозволяет вашему приложению включать экран устройства при запуске приложения.
Возможности приложения
Приложение для создания заметок с большим экраном предоставляет полный набор возможностей для создания заметок.
Поддержка стилуса
 Когда ваше приложение вызывается с дополнительным намерением EXTRA_USE_STYLUS_MODE , установленным в значение true , приложение должно открыть заметку, которая принимает ввод стилусом (или касанием пальца).
 Если для дополнительного намерения установлено значение false , ваше приложение должно открыть заметку, которая принимает ввод с клавиатуры.
Доступ к экрану блокировки
Ваше приложение должно обеспечивать полноэкранное действие, которое запускается при открытии приложения с экрана блокировки устройства.
Ваше приложение должно отображать только исторические заметки, если пользователь дал согласие (в состоянии разблокированного устройства) на показ прошлых заметок. В противном случае при открытии с экрана блокировки ваше приложение всегда должно создавать новую заметку.
 Вы можете проверить, было ли запущено ваше приложение с экрана блокировки, с помощью KeyguardManager#isKeyguardLocked() . Чтобы попросить пользователя аутентифицировать и разблокировать устройство, вызовите 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.  }
 } )
Плавающие окна
Для контекстного ведения заметок ваше приложение должно предоставить действие, которое открывается в плавающем окне при запуске другого приложения.
 Ваше приложение должно поддерживать режим multi-instance , чтобы пользователи могли создавать несколько заметок в нескольких плавающих окнах, даже если ваше приложение для создания заметок запущено в полноэкранном режиме или в режиме разделенного экрана.
Захват контента
Захват контента — ключевая возможность приложений для создания заметок. Благодаря захвату контента пользователи могут делать снимки экрана за плавающим окном приложения для создания заметок. Пользователи могут захватывать все или часть отображения, вставлять содержимое в свою заметку, а также комментировать или выделять захваченное содержимое.
 Ваше приложение для заметок должно предоставлять возможность пользовательского интерфейса, который запускает ActivityResultLauncher , созданный с помощью registerForActivityResult() . Действие намерения ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE предоставляется средству запуска либо напрямую, либо через ActivityResultContract .
 Системное действие захватывает контент, сохраняет его на устройстве и возвращает URI контента вашему приложению в аргументе обратного вызова метода registerForActivityResult() .
 В следующем примере используется универсальный контракт StartActivityForResult : 
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")} }
Ваше приложение должно обрабатывать все коды результатов:
-  CAPTURE_CONTENT_FOR_NOTE_SUCCESS
-  CAPTURE_CONTENT_FOR_NOTE_FAILED
-  CAPTURE_CONTENT_FOR_NOTE_USER_CANCELED
-  CAPTURE_CONTENT_FOR_NOTE_WINDOW_MODE_UNSUPPORTED
-  CAPTURE_CONTENT_FOR_NOTE_BLOCKED_BY_ADMIN
После успешного захвата контента вставьте захваченное изображение в заметку, например:
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.  } }
Функция захвата контента должна быть доступна через возможности пользовательского интерфейса только тогда, когда ваше приложение для создания заметок работает в плавающем окне, а не при работе в полноэкранном режиме, запускаемом с экрана блокировки устройства. (Пользователи могут делать снимки экрана самого приложения для создания заметок с помощью функций создания снимков экрана устройства.)
Чтобы определить, находится ли ваше приложение в плавающем окне (или пузырьке), вызовите следующие методы:
-  isLaunchedFromBubble()чтобы убедиться, что приложение для создания заметок не запускалось в полноэкранном режиме с экрана блокировки устройства.
-  isRoleHeld(RoleManager.ROLE_NOTES)чтобы убедиться, что ваше приложение является приложением для создания заметок по умолчанию (ваше приложение может работать в диалоге или другом типе пузырька, если приложение не выполняет роль заметок).
