إنشاء تطبيق لتدوين الملاحظات

تدوين الملاحظات هو ميزة أساسية في 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 تم ضبط 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));
        });
}

من المفترض أن يتعامل تطبيقك مع جميع رموز النتائج:

عندما يتم التقاط المحتوى بنجاح، الصق الصورة التي تم التقاطها في الملاحظة، مثال:

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) للتحقق من أن تطبيقك هو تطبيق تدوين الملاحظات الافتراضي (يمكن أن تشغيلها في محادثة أو أي نوع آخر من الفقاعة التفسيرية إذا لم يحتفظ التطبيق الملاحظات)

مصادر إضافية