メモ作成は Android の中核機能であり、 対応しています。メモ作成アプリで文章を書いたり、スケッチしたりできる 画面のコンテンツをキャプチャして注釈を付ける 後で確認、修正できるようにメモを保存します。
メモ作成アプリには、ロック画面からでも、他のアプリの実行中でも、 。
メモ作成のタッチペン サポートにより、ユーザー エクスペリエンスが向上します。
メモのロール
「
RoleManager.ROLE_NOTES
ロールはメモ作成アプリを識別し、そのユーザーに
LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
付与します。
アプリでメモのロールを取得する手順は次のとおりです。
isRoleAvailable()
を呼び出す ロールのステータスを確認できます。- メモのロールが利用可能な場合は、
createRequestRoleIntent()
を呼び出します。 メモ固有のインテントを取得します。 startActivityForResult()
を呼び出す メモのインテントで、メモのロールをユーザーに付与するようユーザーに求めます。 。
メモのロールを所有できるアプリは 1 つのみです。
アプリは暗黙の応答に反応して開きます。
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()
:
Kotlin
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. } } )
Java
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); boolean isLocked = keyguardManager.isKeyguardLocked(); keyguardManager.requestDismissKeyguard( this, new KeyguardManager.KeyguardDismissCallback() { @Override public void onDismissError() { // Unlock failed. Dismissing keyguard is not feasible. } @Override public void onDismissSucceeded() { // Unlock succeeded. Device is now unlocked. } @Override public void onDismissCancelled() { // Unlock failed. User cancelled operation or request otherwise cancelled. } });
フローティング ウィンドウ
コンテキストに基づくメモを作成するには、 フローティング ウィンドウに表示されます。
アプリは
multi-instance
複数のフローティング ウィンドウで複数のメモを作成できます。
メモ作成アプリが全画面表示または分割画面で起動されたとき
モードです。
コンテンツ キャプチャ
コンテンツ キャプチャはメモ作成アプリの重要な機能です。コンテンツあり すると、メモ作成画面が表示されている状態でスクリーンショットを撮ることができます。 アプリのフローティング ウィンドウ。ユーザーはディスプレイの全部または一部をキャプチャして、 メモに追加したり、キャプチャしたコンテンツに注釈やハイライトを付けたりできます。
メモ作成アプリには、メモ作成画面を表示する UI アフォーダンスが必要です。
ActivityResultLauncher
作成者
registerForActivityResult()
。
「
ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
インテントのアクションが、直接または
ActivityResultContract
。
システム アクティビティは、コンテンツをキャプチャしてデバイスに保存し、
コンテンツ URI をアプリに渡して、
registerForActivityResult()
。
次の例では、一般的な
StartActivityForResult
契約:
Kotlin
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")} }
Java
private final ActivityResultLauncher<Intent> startForResult = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) { Uri uri = result.getData() != null ? result.getData().getData() : null; // Use the URI to paste the captured content into the note. } }); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button captureButton = findViewById(R.id.capture_button); captureButton.setOnClickListener( view -> { Log.i("ContentCapture", "Launching intent..."); startForResult.launch(new Intent(ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE)); }); }
アプリは以下のすべての結果コードを処理する必要があります。
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
コンテンツ キャプチャに成功したら、キャプチャした画像をメモに貼り付けます。 例:
Kotlin
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. } }
Java
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) { Uri uri = result.getData() != null ? result.getData().getData() : null; // Use the URI to paste the captured content into the note. } });
コンテンツ キャプチャ機能は、 メモ作成アプリがフローティング ウィンドウではなく デバイスのロック画面から起動されます。(ユーザーは メモ作成アプリ自体のスクリーンショットとデバイスのスクリーンショット 機能。)
アプリがフローティング ウィンドウ(またはバブル)で実行されているかどうかを確認するには、 次のメソッドを使用できます。
isLaunchedFromBubble()
メモ作成アプリが全画面表示で デバイスのロック画面isRoleHeld(RoleManager.ROLE_NOTES)
アプリがデフォルトのメモ作成アプリであることを確認します(アプリは アプリが保持されていない場合、会話またはその他の種類のバブル内で実行する メモのロール)