تدوين الملاحظات هو ميزة أساسية في Android تعزز إنتاجية المستخدمين على للأجهزة ذات الشاشات الكبيرة. تتيح تطبيقات تدوين الملاحظات للمستخدمين كتابة الملاحظات نافذة عائمة أو في وضع ملء الشاشة، وتسجيل محتوى الشاشة وإضافة تعليقات توضيحية إليها، وحفظ الملاحظات لمراجعتها ومراجعتها لاحقًا
يمكن للمستخدمين الوصول إلى تطبيقات تدوين الملاحظات من شاشة القفل أو أثناء تشغيل تطبيقات أخرى. التطبيقات.
تتيح ميزة تدوين الملاحظات باستخدام قلم الشاشة تجربة استثنائية للمستخدمين.
دور الملاحظات
تشير رسالة الأشكال البيانية
RoleManager.ROLE_NOTES
تطبيقات تدوين الملاحظات ومنحها
LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
إذن.
للحصول على دور الملاحظات في تطبيقك، عليك اتّباع الخطوات التالية:
- الاتصال بالرقم
isRoleAvailable()
للتحقق من حالة الدور. - إذا كان دور الملاحظات متاحًا، يمكنك الاتصال بالرقم
createRequestRoleIntent()
. للحصول على نية خاصة بالملاحظات. - الاتصال بالرقم
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
تم ضبط 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
بحيث يمكن للمستخدمين إنشاء ملاحظات متعددة في نوافذ عائمة متعددة حتى
عند تشغيل تطبيق تدوين الملاحظات في وضع ملء الشاشة أو في وضع "تقسيم الشاشة"
الحالي.
تسجيل المحتوى
تسجيل المحتوى هو ميزة رئيسية لتطبيقات تدوين الملاحظات. مع محتوى الالتقاط، يمكن للمستخدمين التقاط لقطات شاشة للشاشة وراء عملية تدوين الملاحظات نافذة التطبيق العائمة. يمكن للمستخدمين التقاط الصورة بالكامل أو جزء منها، ثم الصق المحتوى في ملاحظتهم وإضافة تعليقات توضيحية إلى المحتوى الذي صوّرته أو تمييزه.
يجب أن يوفر تطبيق تدوين الملاحظات وظيفة واجهة المستخدم التي تعمل على تشغيل
ActivityResultLauncher
أنشأها
registerForActivityResult()
تشير رسالة الأشكال البيانية
ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
يتمّ توفير إجراء intent إلى مشغّل التطبيقات إما مباشرةً أو من خلال
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)
للتحقق من أن تطبيقك هو تطبيق تدوين الملاحظات الافتراضي (يمكن أن تشغيلها في محادثة أو أي نوع آخر من الفقاعة التفسيرية إذا لم يحتفظ التطبيق الملاحظات)