메모 앱 만들기

메모는 휴대전화에서 사용자 생산성을 향상하는 Android의 핵심 기능입니다. 대형 화면 기기에서 메모 작성 앱을 통해 사용자는 글을 쓰고 스케치할 수 있습니다. 플로팅 창 또는 전체 화면에서 화면 콘텐츠를 캡처하고 주석을 추가할 수 있습니다. 나중에 검토 및 수정할 수 있도록 메모를 저장합니다.

사용자는 잠금 화면에서 또는 다른 앱을 실행하는 동안 메모 앱에 액세스할 수 있습니다. 있습니다.

메모 작성에 스타일러스를 지원함으로써 탁월한 사용자 환경을 제공합니다.

메모 역할

RoleManager.ROLE_NOTES 메모 작성 앱을 식별하고 LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE 권한을 부여했는지 확인합니다.

앱이 메모 역할을 획득하려면 다음 단계를 따르세요.

  1. isRoleAvailable()를 호출합니다. 역할 상태를 확인할 수 있습니다
  2. 메모 역할을 사용할 수 있는 경우 createRequestRoleIntent()를 호출합니다. 메모별 인텐트를 가져올 수 있습니다.
  3. 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():

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.  }
 } )

자바

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

시스템 활동이 콘텐츠를 캡처하여 기기에 저장하고 앱의 콜백 인수에 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.  } }

자바

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.
        }
    });

콘텐츠 캡처 기능은 다음과 같은 경우에만 UI 어포던스를 통해 노출되어야 합니다. 메모 앱이 플로팅 창에서 실행되고 있을 때 전체 화면으로 실행 중, 기기 잠금 화면에서 실행됨 (사용자는 기기 스크린샷이 있는 메모 앱 자체의 스크린샷 없습니다.)

앱이 플로팅 창 (또는 도움말 풍선)에 있는지 확인하려면 다음을 호출합니다. 다음 메서드를 참조하세요.

  • isLaunchedFromBubble() 다음 위치에서 메모 작성 앱이 전체 화면으로 실행되지 않았는지 확인합니다. 기기 잠금 화면
  • isRoleHeld(RoleManager.ROLE_NOTES) 앱을 사용하여 앱이 기본 메모 앱인지 확인합니다 (앱은 대화나 다른 유형의 대화창에서 실행되는 것을 메모 역할)

추가 리소스