یادداشت برداری یکی از قابلیت های اصلی اندروید است که بهره وری کاربر را در دستگاه های صفحه نمایش بزرگ افزایش می دهد. برنامههای یادداشتبرداری به کاربران امکان میدهند در یک پنجره شناور یا تمام صفحه بنویسند و طرحریزی کنند، محتوای صفحه را ضبط کرده و حاشیهنویسی کنند، و یادداشتها را برای بررسی و بازبینی بعدی ذخیره کنند.
کاربران می توانند از صفحه قفل یا هنگام اجرای برنامه های دیگر به برنامه های یادداشت برداری دسترسی داشته باشند.
پشتیبانی از قلم برای یادداشت برداری تجربه کاربری استثنایی را فراهم می کند.
نقش یادداشت ها
نقش 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
فراخوانی می شود که روی 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. } } )
جاوا
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
مستقیماً یا از طریق 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")} }
جاوا
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
وقتی ضبط محتوا با موفقیت انجام شد، تصویر گرفته شده را در یادداشت قرار دهید، به عنوان مثال:
کاتلین
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. } }
جاوا
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)
برای تأیید اینکه برنامه شما برنامه پیشفرض یادداشتبرداری است (اگر برنامه نقش یادداشتبرداری را نداشته باشد، برنامه شما میتواند در یک مکالمه یا نوع دیگری از حباب اجرا شود)
منابع اضافی
،یادداشت برداری یکی از قابلیت های اصلی اندروید است که بهره وری کاربر را در دستگاه های صفحه نمایش بزرگ افزایش می دهد. برنامههای یادداشتبرداری به کاربران امکان میدهند در یک پنجره شناور یا تمام صفحه بنویسند و طرحریزی کنند، محتوای صفحه را ضبط کرده و حاشیهنویسی کنند، و یادداشتها را برای بررسی و بازبینی بعدی ذخیره کنند.
کاربران می توانند از صفحه قفل یا هنگام اجرای برنامه های دیگر به برنامه های یادداشت برداری دسترسی داشته باشند.
پشتیبانی از قلم برای یادداشت برداری تجربه کاربری استثنایی را فراهم می کند.
نقش یادداشت ها
نقش 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
فراخوانی می شود که روی 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. } } )
جاوا
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
مستقیماً یا از طریق 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")} }
جاوا
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
وقتی ضبط محتوا با موفقیت انجام شد، تصویر گرفته شده را در یادداشت قرار دهید، به عنوان مثال:
کاتلین
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. } }
جاوا
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)
برای تأیید اینکه برنامه شما برنامه پیشفرض یادداشتبرداری است (اگر برنامه نقش یادداشتبرداری را نداشته باشد، برنامه شما میتواند در یک مکالمه یا نوع دیگری از حباب اجرا شود)
منابع اضافی
،یادداشت برداری یکی از قابلیت های اصلی اندروید است که بهره وری کاربر را در دستگاه های صفحه نمایش بزرگ افزایش می دهد. برنامههای یادداشتبرداری به کاربران امکان میدهند در یک پنجره شناور یا تمام صفحه بنویسند و طرحریزی کنند، محتوای صفحه را ضبط کرده و حاشیهنویسی کنند، و یادداشتها را برای بررسی و بازبینی بعدی ذخیره کنند.
کاربران می توانند از صفحه قفل یا هنگام اجرای برنامه های دیگر به برنامه های یادداشت برداری دسترسی داشته باشند.
پشتیبانی از قلم برای یادداشت برداری تجربه کاربری استثنایی را فراهم می کند.
نقش یادداشت ها
نقش 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
فراخوانی می شود که روی 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. } } )
جاوا
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
مستقیماً یا از طریق 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")} }
جاوا
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
وقتی ضبط محتوا با موفقیت انجام شد، تصویر گرفته شده را در یادداشت قرار دهید، به عنوان مثال:
کاتلین
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. } }
جاوا
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)
برای تأیید اینکه برنامه شما برنامه پیشفرض یادداشتبرداری است (اگر برنامه نقش یادداشتبرداری را نداشته باشد، برنامه شما میتواند در یک مکالمه یا نوع دیگری از حباب اجرا شود)