Android 6.0 Marshmallow روش جدیدی را برای کاربران برای تعامل با برنامهها از طریق برنامههای دستیار، مانند Google Assistant ، معرفی میکند. دستیار یک پنجره سطح بالایی است که کاربران می توانند آن را مشاهده کنند تا اقدامات مرتبط با زمینه را برای فعالیت فعلی به دست آورند. این اقدامات ممکن است شامل پیوندهای عمیق به برنامه های دیگر در دستگاه باشد.
کاربران با فشار طولانی روی دکمه Home یا با گفتن یک عبارت کلیدی ، دستیار را فعال می کنند. در پاسخ، سیستم پنجره سطح بالایی را باز می کند که اقدامات مرتبط با زمینه را نشان می دهد.
یک برنامه دستیار، مانند Google Assistant، پنجره روکش دستیار را از طریق قابلیتی به نام Now on Tap پیاده سازی می کند که با عملکرد سطح پلت فرم اندروید کار می کند. این سیستم به کاربر اجازه می دهد تا یک برنامه دستیار را انتخاب کند، که با استفاده از API Assist Android، اطلاعات متنی را از برنامه شما به دست می آورد.
این راهنما توضیح می دهد که چگونه برنامه های Android از API Assist Android برای بهبود تجربه کاربر دستیار استفاده می کنند. برای یادگیری نحوه ایجاد یک برنامه رسانه به طوری که «دستیار» بتواند راهاندازی و کنترل کند، به «دستیار Google» و برنامههای رسانه مراجعه کنید.
استفاده از دستیاران
شکل 1 یک تعامل معمولی کاربر با دستیار را نشان می دهد. وقتی کاربر دکمه Home را برای مدت طولانی فشار میدهد، تماسهای Assist API در برنامه منبع فراخوانی میشوند (مرحله 1). دستیار پنجره همپوشانی (مرحله 2 و 3) را رندر می کند و سپس کاربر اقدامی را برای انجام انتخاب می کند. دستیار اقدام انتخاب شده را اجرا می کند، مانند شلیک یک هدف با پیوند عمیق به برنامه رستوران ( مقصد ) (مرحله 4).
کاربران می توانند با انتخاب تنظیمات > برنامه ها > برنامه های پیش فرض > کمک و ورودی صوتی، دستیار را پیکربندی کنند. همانطور که در شکل 2 نشان داده شده است، کاربران می توانند گزینه های سیستم مانند دسترسی به محتویات صفحه به عنوان متن و دسترسی به اسکرین شات را تغییر دهند.
برنامه منبع
برای اطمینان از اینکه برنامه شما با دستیار به عنوان منبع اطلاعاتی برای کاربر کار می کند، فقط باید بهترین شیوه های دسترسی را دنبال کنید. این بخش نحوه ارائه اطلاعات اضافی را برای کمک به بهبود تجربه کاربر دستیار و همچنین سناریوهایی که نیاز به رسیدگی ویژه دارند، مانند نماهای سفارشی، توضیح میدهد.
اطلاعات اضافی را با دستیار به اشتراک بگذارید
علاوه بر متن و عکس صفحه، برنامه شما میتواند اطلاعات دیگری را با دستیار به اشتراک بگذارد. برای مثال، برنامه موسیقی شما میتواند انتخاب کند که اطلاعات آلبوم فعلی را ارسال کند تا دستیار بتواند اقدامات هوشمندانهتری را متناسب با فعالیت فعلی پیشنهاد دهد. توجه داشته باشید که API های Assist کنترل های رسانه ای را ارائه نمی دهند. برای افزودن کنترلهای رسانه به «دستیار Google» و برنامههای رسانه مراجعه کنید.
برای ارائه اطلاعات اضافی به دستیار، برنامه شما با ثبت یک شنونده برنامه، زمینه برنامه جهانی را فراهم میکند و اطلاعات مربوط به فعالیت را با فراخوانهای فعالیت، همانطور که در شکل 3 نشان داده شده است، ارائه میکند:
برای ارائه زمینه برنامه جهانی، برنامه یک پیاده سازی از Application.OnProvideAssistDataListener
ایجاد می کند و آن را با استفاده از registerOnProvideAssistDataListener()
ثبت می کند. برای ارائه اطلاعات زمینهای خاص فعالیت، فعالیت روی onProvideAssistData()
و onProvideAssistContent()
لغو میشود. دو روش فعالیت پس از فراخوانی فراخوانی جهانی اختیاری فراخوانی می شوند. از آنجایی که تماسهای برگشتی روی رشته اصلی اجرا میشوند، باید به سرعت تکمیل شوند. تماسهای برگشتی فقط زمانی فراخوانی میشوند که فعالیت در حال اجرا باشد.
فراهم کردن زمینه
هنگامی که کاربر دستیار را فعال می کند، onProvideAssistData()
فراخوانی می شود تا یک ACTION_ASSIST
Intent کامل با تمام زمینه برنامه فعلی که به عنوان نمونه ای از AssistStructure
نمایش داده می شود، بسازد. می توانید این روش را لغو کنید تا هر چیزی را که دوست دارید در بسته قرار دهید تا در قسمت EXTRA_ASSIST_CONTEXT
هدف کمک ظاهر شود.
توصیف محتوا
برنامه شما می تواند onProvideAssistContent()
را برای بهبود تجربه کاربر دستیار با ارائه مراجع مرتبط با محتوا مرتبط با فعالیت فعلی پیاده سازی کند. می توانید محتوای برنامه را با استفاده از واژگان رایج تعریف شده توسط Schema.org از طریق یک شی JSON-LD توصیف کنید. در مثال زیر، یک برنامه موسیقی داده های ساختار یافته ای را برای توصیف آلبوم موسیقی که کاربر در حال حاضر مشاهده می کند ارائه می دهد:
override fun onProvideAssistContent(assistContent: AssistContent) {
super.onProvideAssistContent(assistContent)
val structuredJson: String = JSONObject()
.put("@type", "MusicRecording")
.put("@id", "https://example.com/music/recording")
.put("name", "Album Title")
.toString()
assistContent.structuredData = structuredJson
}
@Override
public void onProvideAssistContent(AssistContent assistContent) {
super.onProvideAssistContent(assistContent);
String structuredJson = new JSONObject()
.put("@type", "MusicRecording")
.put("@id", "https://example.com/music/recording")
.put("name", "Album Title")
.toString();
assistContent.setStructuredData(structuredJson);
}
همچنین میتوانید تجربه کاربر را با پیادهسازیهای سفارشی onProvideAssistContent()
بهبود بخشید که میتواند مزایای زیر را ارائه دهد:
- محتوای ارائه شده را با هدف بازتاب بهتر بافت سطح بالای فعالیت تنظیم می کند .
- URI محتوای نمایش داده شده را فراهم می کند .
-
setClipData()
را با محتوای مورد علاقه اضافی که کاربر در حال حاضر مشاهده می کند پر می کند.
توجه: برنامههایی که از پیادهسازی انتخاب متن سفارشی استفاده میکنند احتمالاً باید onProvideAssistContent()
را پیادهسازی کنند و setClipData()
را فراخوانی کنند.
اجرای پیش فرض
اگر نه onProvideAssistData()
و نه پاسخ تماس onProvideAssistContent()
اجرا نشود، سیستم همچنان ادامه میدهد و اطلاعات جمعآوریشده خودکار را به دستیار ارسال میکند، مگر اینکه پنجره فعلی بهعنوان ایمن علامتگذاری شود. همانطور که در شکل 3 نشان داده شده است، سیستم از پیاده سازی های پیش فرض onProvideStructure()
و onProvideVirtualStructure()
برای جمع آوری متن و مشاهده اطلاعات سلسله مراتبی استفاده می کند. اگر نمای شما ترسیم متن سفارشی را پیادهسازی میکند، onProvideStructure()
را لغو کنید تا با فراخوانی setText(CharSequence)
متنی را که به کاربر نشان داده میشود در اختیار دستیار قرار دهید.
در بیشتر موارد، اجرای پشتیبانی دسترسی دستیار را قادر می سازد تا اطلاعات مورد نیاز خود را به دست آورد. برای پیادهسازی پشتیبانی دسترسپذیری، بهترین روشهای توصیفشده در دسترسی به برنامهها ، از جمله موارد زیر را رعایت کنید:
- ویژگی های
android:contentDescription
ارائه دهید. -
AccessibilityNodeInfo
را برای نماهای سفارشی پر کنید. - مطمئن شوید که اشیاء
ViewGroup
سفارشی فرزندان خود را به درستی در معرض دید قرار می دهند .
بدون در نظر گرفتن نظرات دستیاران
برای مدیریت اطلاعات حساس، برنامه شما میتواند با تنظیم پارامتر طرحبندی FLAG_SECURE
در WindowManager
، نمای فعلی را از دستیار حذف کند. شما باید FLAG_SECURE
به طور صریح برای هر پنجره ایجاد شده توسط فعالیت، از جمله گفتگوها، تنظیم کنید. برنامه شما همچنین میتواند از setSecure()
برای حذف یک سطح از دستیار استفاده کند. هیچ مکانیزم جهانی (سطح برنامه) برای حذف همه نماها از دستیار وجود ندارد. توجه داشته باشید که FLAG_SECURE
باعث نمیشود که تماسهای Assist API متوقف شود. فعالیتی که از FLAG_SECURE
استفاده میکند همچنان میتواند با استفاده از تماسهایی که قبلاً در این راهنما توضیح داده شد، اطلاعاتی را به یک برنامه دستیار ارائه دهد.
توجه: برای حسابهای سازمانی (Android for Work)، سرپرست میتواند با استفاده از روش setScreenCaptureDisabled()
API DevicePolicyManager
، مجموعه دادههای دستیار را برای نمایه کاری غیرفعال کند.
تعاملات صوتی
تماسهای Assist API نیز با شناسایی عبارت کلیدی فراخوانی میشوند. برای اطلاعات بیشتر، به مستندات عملکردهای صوتی مراجعه کنید.
ملاحظات ترتیب Z
یک دستیار از یک پنجره همپوشانی سبک استفاده می کند که در بالای فعالیت فعلی نمایش داده می شود. از آنجایی که کاربر میتواند در هر زمانی دستیار را فعال کند، همانطور که در شکل 4 نشان داده شده است، پنجرههای هشدار دائمی سیستم را ایجاد نکنید که با پنجره همپوشانی تداخل داشته باشد.
اگر برنامه شما از پنجرههای هشدار سیستم استفاده میکند، فوراً آنها را حذف کنید زیرا ماندن آنها روی صفحه باعث کاهش تجربه کاربر میشود.
برنامه مقصد
برنامههای دستیار معمولاً از پیوند عمیق برای یافتن برنامههای مقصد استفاده میکنند. برای اینکه برنامه خود را به یک برنامه مقصد بالقوه تبدیل کنید، پشتیبانی از پیوند عمیق را اضافه کنید. تطبیق بین زمینه کاربر فعلی و پیوندهای عمیق یا سایر اقدامات بالقوه نمایش داده شده در پنجره همپوشانی (در مرحله 3 در شکل 1 نشان داده شده است) مختص اجرای دستیار Google است. به عنوان مثال، برنامه Google Assistant از پیوندهای عمیق و پیوندهای برنامه برای هدایت ترافیک به برنامه های مقصد استفاده می کند.
پیاده سازی دستیار خود
ممکن است بخواهید دستیار خود را پیاده سازی کنید. همانطور که در شکل 2 نشان داده شده است، کاربر می تواند برنامه دستیار فعال را انتخاب کند. برنامه دستیار باید پیاده سازی VoiceInteractionSessionService
و VoiceInteractionSession
را همانطور که در این مثال VoiceInteraction
نشان داده شده است ارائه دهد. همچنین به مجوز BIND_VOICE_INTERACTION
نیاز دارد. سپس دستیار می تواند متن را دریافت کند و سلسله مراتبی را که به عنوان نمونه ای از AssistStructure
در onHandleAssist()
نشان داده شده است، مشاهده کند. اسکرین شات را از طریق onHandleScreenshot()
دریافت می کند.