Pembuatan catatan adalah kemampuan inti Android yang meningkatkan produktivitas pengguna di perangkat layar besar. Aplikasi pencatatan memungkinkan pengguna untuk menulis dan membuat sketsa jendela mengambang atau pada layar penuh, menangkap dan memberi anotasi konten layar, dan simpan catatan untuk ditinjau dan direvisi di lain waktu.
Pengguna dapat mengakses aplikasi pencatat dari layar kunci atau saat menjalankan aplikasi.
Dukungan stilus untuk pencatatan memberikan pengalaman pengguna yang luar biasa.
Peran catatan
Tujuan
RoleManager.ROLE_NOTES
mengidentifikasi aplikasi pencatat dan memberinya
LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
izin akses.
Untuk mendapatkan peran catatan untuk aplikasi Anda, lakukan hal berikut:
- Panggil
isRoleAvailable()
untuk memeriksa status peran. - Jika peran catatan tersedia, panggil
createRequestRoleIntent()
untuk mendapatkan intent khusus catatan. - Panggil
startActivityForResult()
dengan maksud catatan untuk meminta pengguna memberikan peran catatan kepada .
Hanya satu aplikasi yang dapat memiliki peran catatan.
Aplikasi akan terbuka sebagai respons terhadap
ACTION_CREATE_NOTE
tindakan intent. Jika dipanggil dari layar kunci perangkat, aplikasi akan terbuka penuh
layar; jika dipanggil saat layar tidak terkunci, di jendela mengambang.
Manifes aplikasi
Agar memenuhi syarat untuk peran catatan, aplikasi Anda harus menyertakan pernyataan berikut dalam manifes aplikasi:
<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>
Deklarasi ini memungkinkan pengguna menetapkan peran catatan ke aplikasi Anda, sehingga aplikasi pencatat default:
ACTION_CREATE_NOTE
menetapkan tindakan intent yang akan direspons aplikasi AndashowWhenLocked
membuat aplikasi Anda dapat diakses dari layar kunci perangkatturnScreenOn
mengaktifkan aplikasi Anda untuk mengaktifkan layar perangkat saat aplikasi berjalan
Fitur aplikasi
Aplikasi pencatat yang terdiferensiasi di perangkat layar besar memberikan pelengkap yang lengkap tentang kemampuan pencatatan.
Dukungan stilus
Saat aplikasi Anda dipanggil dengan metode
EXTRA_USE_STYLUS_MODE
ekstra intent yang disetel ke true
, aplikasi harus membuka catatan yang menerima stilus (atau
input sentuh jari).
Jika intent tambahan ditetapkan ke false
, aplikasi Anda harus membuka catatan yang menerima
input keyboard.
Akses layar kunci
Aplikasi Anda harus menyediakan aktivitas layar penuh yang berjalan saat aplikasi dibuka dari layar kunci perangkat.
Aplikasi Anda sebaiknya hanya menampilkan catatan historis jika pengguna telah memberikan izin (di bagian status perangkat tidak terkunci) untuk menampilkan catatan sebelumnya. Sebaliknya, saat dibuka dari layar kunci, aplikasi Anda harus selalu membuat catatan baru.
Anda dapat memeriksa apakah aplikasi telah diluncurkan
dari layar kunci dengan
KeyguardManager#isKeyguardLocked()
Untuk meminta pengguna mengautentikasi dan membuka kunci perangkat, panggil
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. } });
Jendela mengambang
Untuk pembuatan catatan kontekstual, aplikasi Anda harus menyediakan aktivitas yang akan terbuka di jendela mengambang saat aplikasi lain sedang berjalan.
Aplikasi Anda harus mendukung
multi-instance
sehingga pengguna dapat membuat beberapa catatan dalam beberapa jendela mengambang, bahkan
saat aplikasi pencatat diluncurkan dalam mode layar penuh atau dalam mode layar terpisah
mode.
Pengambilan konten
Pengambilan konten adalah kemampuan utama aplikasi pencatat. Dengan konten menangkap gambar, pengguna dapat mengambil screenshot tampilan di balik pencatatan jendela mengambang aplikasi. Pengguna dapat merekam semua atau sebagian tampilan, tempelkan konten ke dalam catatan mereka, dan memberi anotasi atau menyoroti konten yang diambil.
Aplikasi pencatatan Anda harus menyediakan
kemampuan UI yang meluncurkan
ActivityResultLauncher
dibuat oleh
registerForActivityResult()
.
Tujuan
ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
tindakan intent disediakan ke peluncur baik secara langsung maupun melalui
ActivityResultContract
.
Aktivitas sistem mengambil gambar konten, menyimpannya di perangkat, dan mengembalikan
URI konten ke aplikasi Anda dalam argumen callback
registerForActivityResult()
.
Contoh berikut menggunakan
StartActivityForResult
kontrak:
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)); }); }
Aplikasi Anda harus menangani semua kode hasil:
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
Saat pengambilan konten berhasil, tempelkan gambar yang diambil ke catatan, sebagai contoh:
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. } });
Fitur pengambilan konten harus diekspos melalui kemampuan UI hanya ketika aplikasi pencatat Anda berjalan di jendela mengambang—bukan saat berjalan dengan layar penuh, yang diluncurkan dari layar kunci perangkat. (Pengguna dapat mengambil screenshot aplikasi pencatat itu sendiri dengan screenshot perangkat .)
Untuk menentukan apakah aplikasi Anda berada di jendela mengambang (atau balon), panggil metode metode berikut:
isLaunchedFromBubble()
untuk memeriksa bahwa aplikasi pencatat tidak diluncurkan dalam layar penuh dari layar kunci perangkatisRoleHeld(RoleManager.ROLE_NOTES)
untuk memverifikasi bahwa aplikasi Anda adalah aplikasi pencatat default (aplikasi Anda dapat berjalan dalam percakapan atau jenis balon lainnya jika aplikasi tidak memiliki peran catatan)