メモ作成アプリを作成する

メモ作成は Android の中核機能であり、 対応しています。メモ作成アプリで文章を書いたり、スケッチしたりできる 画面のコンテンツをキャプチャして注釈を付ける 後で確認、修正できるようにメモを保存します。

メモ作成アプリには、ロック画面からでも、他のアプリの実行中でも、 。

メモ作成のタッチペン サポートにより、ユーザー エクスペリエンスが向上します。

メモのロール

RoleManager.ROLE_NOTES ロールはメモ作成アプリを識別し、そのユーザーに LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE 付与します。

アプリでメモのロールを取得する手順は次のとおりです。

  1. isRoleAvailable() を呼び出す ロールのステータスを確認できます。
  2. メモのロールが利用可能な場合は、createRequestRoleIntent() を呼び出します。 メモ固有のインテントを取得します。
  3. 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));
        });
}

アプリは以下のすべての結果コードを処理する必要があります。

コンテンツ キャプチャに成功したら、キャプチャした画像をメモに貼り付けます。 例:

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) アプリがデフォルトのメモ作成アプリであることを確認します(アプリは アプリが保持されていない場合、会話またはその他の種類のバブル内で実行する メモのロール)
で確認できます。

参考情報