创建记事应用

یادداشت برداری یکی از قابلیت های اصلی اندروید است که بهره وری کاربر را در دستگاه های صفحه نمایش بزرگ افزایش می دهد. برنامه‌های یادداشت‌برداری به کاربران امکان می‌دهند در یک پنجره شناور یا تمام صفحه بنویسند و طرح‌ریزی کنند، محتوای صفحه را ضبط کرده و حاشیه‌نویسی کنند، و یادداشت‌ها را برای بررسی و بازبینی بعدی ذخیره کنند.

کاربران می توانند از صفحه قفل یا هنگام اجرای برنامه های دیگر به برنامه های یادداشت برداری دسترسی داشته باشند.

پشتیبانی از قلم برای یادداشت برداری تجربه کاربری استثنایی را فراهم می کند.

نقش یادداشت ها

نقش 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() تماس بگیرید:

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

پنجره های شناور

برای یادداشت برداری متنی، برنامه شما باید فعالیتی را ارائه دهد که هنگام اجرای برنامه دیگری در یک پنجره شناور باز شود.

برنامه شما باید از حالت multi-instance پشتیبانی کند تا کاربران بتوانند چندین یادداشت در چندین پنجره شناور ایجاد کنند، حتی زمانی که برنامه یادداشت برداری شما در حالت تمام صفحه یا در حالت تقسیم صفحه راه اندازی می شود.

ضبط محتوا

ضبط محتوا یکی از قابلیت های کلیدی برنامه های یادداشت برداری است. با ضبط محتوا، کاربران می توانند از صفحه نمایش پشت پنجره شناور برنامه یادداشت برداری عکس بگیرند. کاربران می توانند تمام یا بخشی از صفحه نمایش را ضبط کنند، محتوا را در یادداشت خود بچسبانند و محتوای ضبط شده را حاشیه نویسی یا برجسته کنند.

برنامه یادداشت برداری شما باید یک رابط کاربری مناسب ارائه دهد که ActivityResultLauncher ایجاد شده توسط registerForActivityResult() را راه اندازی کند. اقدام هدف ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE مستقیماً یا از طریق ActivityResultContract به راه‌انداز ارائه می‌شود.

یک فعالیت سیستمی محتوا را ضبط می کند، آن را در دستگاه ذخیره می کند، و URI محتوا را در آرگومان callback در registerForActivityResult() به برنامه شما برمی گرداند.

مثال زیر از یک قرارداد عمومی StartActivityForResult استفاده می کند:

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

برنامه شما باید همه کدهای نتیجه را کنترل کند:

وقتی ضبط محتوا با موفقیت انجام شد، تصویر گرفته شده را در یادداشت قرار دهید، به عنوان مثال:

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

ویژگی ضبط محتوا باید فقط زمانی که برنامه یادداشت‌برداری شما در یک پنجره شناور اجرا می‌شود از طریق یک رابط کاربری قابل مشاهده باشد، نه زمانی که تمام صفحه اجرا می‌شود و از صفحه قفل دستگاه راه‌اندازی می‌شود. (کاربران می توانند از خود برنامه یادداشت برداری با قابلیت اسکرین شات دستگاه اسکرین شات بگیرند.)

برای تعیین اینکه آیا برنامه شما در یک پنجره شناور (یا حباب) قرار دارد، روش های زیر را فراخوانی کنید:

  • isLaunchedFromBubble() برای بررسی اینکه آیا برنامه یادداشت برداری شما تمام صفحه از صفحه قفل دستگاه راه اندازی نشده است
  • isRoleHeld(RoleManager.ROLE_NOTES) برای تأیید اینکه برنامه شما برنامه پیش‌فرض یادداشت‌برداری است (اگر برنامه نقش یادداشت‌برداری را نداشته باشد، برنامه شما می‌تواند در یک مکالمه یا نوع دیگری از حباب اجرا شود)

منابع اضافی