การจดบันทึกเป็นความสามารถหลักของ Android ที่ช่วยเพิ่มประสิทธิภาพการทำงานของผู้ใช้ใน อุปกรณ์ที่มีหน้าจอขนาดใหญ่ แอปสำหรับจดโน้ตช่วยให้ผู้ใช้เขียนและร่างภาพได้ หน้าต่างแบบลอยหรือในโหมดเต็มหน้าจอ จับภาพและใส่คำอธิบายประกอบเนื้อหาบนหน้าจอ และบันทึกหมายเหตุไว้เพื่อตรวจทานและแก้ไขในภายหลัง
ผู้ใช้จะเข้าถึงแอปจดโน้ตได้จากหน้าจอล็อกหรือขณะเรียกใช้แอปอื่น แอป
การรองรับสไตลัสสำหรับการจดโน้ตช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ยอดเยี่ยม
บทบาท "การจดบันทึก"
RoleManager.ROLE_NOTES
จะระบุแอปจดโน้ตและให้สิทธิ์
LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
สิทธิ์
หากต้องการรับบทบาท "โน้ต" สำหรับแอป ให้ทำดังนี้
- โทร
isRoleAvailable()
เพื่อตรวจสอบสถานะของบทบาท - หากบทบาท "โน้ต" พร้อมใช้งาน โปรดโทรหา
createRequestRoleIntent()
เพื่อดูความตั้งใจที่เฉพาะเจาะจงกับโน้ต - โทร
startActivityForResult()
พร้อมความตั้งใจที่จะแจ้งให้ผู้ใช้มอบบทบาทโน้ตแก่ แอป
มีบทบาทในโน้ตได้เพียงแอปเดียวเท่านั้น
แอปจะเปิดขึ้นตามการโต้ตอบโดยนัย
ACTION_CREATE_NOTE
การดำเนินการผ่าน Intent หากเรียกใช้จากหน้าจอล็อกของอุปกรณ์ แอปจะเปิดขึ้นอย่างสมบูรณ์
บนหน้าจอ หากเรียกใช้ขณะที่หน้าจอปลดล็อกอยู่ ในหน้าต่างแบบลอย
ไฟล์ Manifest ของแอป
แอปของคุณต้องมีประกาศต่อไปนี้จึงจะมีสิทธิ์ได้รับบทบาท "โน้ต" ในไฟล์ Manifest ของแอป
<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
ตั้งค่าการดำเนินการของ Intent ที่แอปของคุณตอบสนองshowWhenLocked
ทำให้เข้าถึงแอปได้จากหน้าจอล็อกของอุปกรณ์turnScreenOn
เปิดใช้ แอปเพื่อเปิดหน้าจออุปกรณ์เมื่อแอปทำงาน
ฟีเจอร์ต่างๆ ของแอป
แอปจดโน้ตที่มีหน้าจอขนาดใหญ่ซึ่งแตกต่างจากฟีเจอร์อื่นจะช่วยเสริมประสิทธิภาพอย่างเต็มรูปแบบ ของความสามารถในการจดโน้ต
รองรับสไตลัส
เมื่อแอปของคุณมีการเรียกใช้ด้วย
EXTRA_USE_STYLUS_MODE
ตั้งค่า Intent เพิ่มเติมเป็น true
แอปควรเปิดโน้ตที่ยอมรับสไตลัส (หรือ
ใช้นิ้วสัมผัส)
หากตั้งค่า Intent เพิ่มเติมเป็น 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
จะดำเนินการผ่าน Intent ให้ตัวเรียกใช้งานโดยตรงหรือผ่าน
ActivityResultContract
กิจกรรมของระบบจะบันทึกเนื้อหา บันทึกไว้ในอุปกรณ์ และส่งคืนค่า
URI เนื้อหาไปยังแอปของคุณในอาร์กิวเมนต์ Callback ของ
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. } });
ควรเปิดเผยฟีเจอร์การจับภาพเนื้อหาผ่านการชำระเงิน UI เฉพาะเมื่อ แอปจดโน้ตกำลังทำงานในหน้าต่างแบบลอย ไม่ใช่เมื่อ แสดงแบบเต็มหน้าจอ เปิดจากหน้าจอล็อกของอุปกรณ์ (ผู้ใช้สามารถใช้เวลา ภาพหน้าจอของแอปสำหรับจดโน้ตด้วยภาพหน้าจอของอุปกรณ์ อื่นๆ)
หากต้องการทราบว่าแอปอยู่ในหน้าต่างแบบลอย (หรือลูกโป่ง) หรือไม่ ให้เรียกใช้ วิธีการต่อไปนี้
isLaunchedFromBubble()
เพื่อตรวจสอบว่าแอปจดโน้ตไม่ได้เปิดแอปแบบเต็มหน้าจอจาก หน้าจอล็อกของอุปกรณ์isRoleHeld(RoleManager.ROLE_NOTES)
เพื่อยืนยันว่าแอปของคุณเป็นแอปจดโน้ตเริ่มต้น (แอปสามารถ ในการสนทนาหรือบับเบิลประเภทอื่นๆ หากแอปไม่คง บทบาทโน้ต)