ارتباط مستقیم از طریق یک شبکه در دستگاه های مستقل

با Wear OS by Google، یک ساعت می‌تواند مستقیماً و بدون دسترسی به تلفن اندروید یا iOS با یک شبکه ارتباط برقرار کند. از API لایه داده برای اتصال برنامه Wear OS به شبکه استفاده نکنید. در عوض، دستورالعمل‌ها و مراحل موجود در این راهنما را دنبال کنید.

دسترسی به شبکه

برنامه‌های Wear OS می‌توانند درخواست‌های شبکه ارسال کنند. وقتی یک ساعت از طریق بلوتوث به تلفن متصل می‌شود، ترافیک شبکه ساعت معمولاً از طریق تلفن پروکسی می‌شود.

وقتی تلفن در دسترس نیست، بسته به سخت‌افزار ساعت، از شبکه‌های Wi-Fi و تلفن همراه استفاده می‌شود. پلتفرم Wear OS انتقال بین شبکه‌ها را مدیریت می‌کند.

شما می‌توانید از پروتکل‌هایی مانند HTTP، TCP و UDP استفاده کنید. با این حال، API های android.webkit ، از جمله کلاس CookieManager ، در دسترس نیستند. می‌توانید با خواندن و نوشتن هدرها در درخواست‌ها و پاسخ‌ها، از کوکی‌ها استفاده کنید.

WorkManager برای درخواست‌های ناهمزمان، از جمله نظرسنجی در فواصل منظم، استفاده کنید.

اگر نیاز به اتصال به انواع خاصی از شبکه دارید، به بخش «خواندن وضعیت شبکه» مراجعه کنید.

دسترسی به شبکه با پهنای باند بالا

پلتفرم Wear OS اتصال به شبکه را با هدف ارائه بهترین تجربه کاربری مدیریت می‌کند. این پلتفرم با ایجاد تعادل بین دو نیاز، شبکه فعال پیش‌فرض را انتخاب می‌کند: عمر باتری طولانی و پهنای باند شبکه.

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

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

درخواست اتصال وای فای

برای مواردی که نیاز به دسترسی به شبکه با پهنای باند بالا دارند، مانند انتقال فایل‌های بزرگ یا پخش رسانه، درخواست اتصال با یک انتقال با پهنای باند بالا، مانند Wi-Fi، را بدهید. این موضوع در مثال زیر نشان داده شده است:

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request
        // or callback.
    }
}

fun requestWifiNetwork() {
    connectivityManager.requestNetwork(
        NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
    )
}

ممکن است اتصال به شبکه آنی نباشد، زیرا ممکن است وای‌فای یا رادیوی تلفن همراه ساعت برای صرفه‌جویی در مصرف باتری خاموش باشد. اگر ساعت نتواند به شبکه متصل شود، متد onAvailable() از نمونه NetworkCallback شما فراخوانی نمی‌شود.

پس از فراخوانی تابع onAvailable() ، دستگاه تلاش می‌کند تا زمان انتشار NetworkCallback به شبکه Wi-Fi متصل بماند. برای حفظ عمر باتری، همانطور که در مثال زیر نشان داده شده است، زمانی که دیگر به شبکه Wi-Fi نیاز ندارید، تابع callback را رها کنید.

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

فعالیت تنظیمات Wi-Fi را اجرا کنید

هنگام درخواست شبکه وای‌فای، سیستم سعی می‌کند در صورت پیکربندی و در دسترس بودن شبکه ذخیره شده، به آن متصل شود. اگر هیچ شبکه وای‌فای ذخیره شده‌ای در دسترس نباشد، متد فراخوانی onAvailable از نمونه NetworkCallback شما فراخوانی نمی‌شود.

اگر از یک Handler برای زمان‌بندی درخواست شبکه استفاده می‌کنید، می‌توانید کاربر را به سمت اضافه کردن یک شبکه Wi-Fi در زمان وقوع timeout هدایت کنید. با استفاده از intent زیر، کاربر را مستقیماً به activity مربوط به اضافه کردن یک شبکه Wi-Fi هدایت کنید:

val networkSettingsAction = "com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"
val intent = Intent(networkSettingsAction).apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)

برای اجرای تنظیمات، برنامه شما باید مجوز CHANGE_WIFI_STATE را داشته باشد.

ملاحظات رابط کاربری

اگر برنامه شما برای عملیاتی با پهنای باند بالا نیاز به اتصال به یک شبکه Wi-Fi جدید دارد، باید به طور یکپارچه این اتصال را دریافت کرده و در صورت نیاز آن را آزاد کنید. اگر هیچ شبکه Wi-Fi در دسترس نیست، توضیح دهید که این ویژگی به Wi-Fi نیاز دارد و وسیله‌ای برای راه‌اندازی تنظیمات Wi-Fi فراهم کنید. کاربر را از دسترسی به ویژگی‌های برنامه که به شبکه پهنای باند بالا نیاز ندارند، مسدود نکنید.

ملاحظات مربوط به مصرف برق و داده

برای کمک به حفظ عمر باتری و به حداقل رساندن مصرف داده تلفن همراه، هرگونه کار غیرضروری شبکه، مانند گزارش تحلیلی یا جمع‌آوری گزارش‌ها را تا زمانی که دستگاه Wear OS به جای اتصال LTE یا metered، اتصال بلوتوث یا وای‌فای را دوباره برقرار کند، به تعویق بیندازید.

پیام‌رسانی ابری

برای ارسال اعلان‌ها، مستقیماً از Firebase Cloud Messaging (FCM) استفاده کنید.

هیچ API برای دسترسی به شبکه یا FCM مختص Wear OS نیست. به مستندات موجود در مورد اتصال به شبکه و پیام‌رسانی ابری مراجعه کنید.

FCM به خوبی با Doze کار می‌کند و روش پیشنهادی برای ارسال اعلان‌ها به ساعت است.

با جمع‌آوری یک توکن ثبت نام برای یک دستگاه هنگام اجرای برنامه Wear OS، پیام‌های FCM را فراهم کنید. سپس وقتی سرور شما پیام‌ها را به نقطه پایانی FCM REST ارسال می‌کند، این توکن را به عنوان بخشی از مقصد در نظر بگیرید. FCM پیام‌ها را به دستگاهی که توسط توکن شناسایی شده است، ارسال می‌کند.

یک پیام FCM در قالب نشانه‌گذاری شیء جاوا اسکریپت (JSON) است و می‌تواند شامل یک یا هر دو مورد از payloadهای زیر باشد:

  • بار اطلاع‌رسانی: وقتی یک بار اطلاع‌رسانی توسط ساعت دریافت می‌شود، داده‌ها مستقیماً در جریان اطلاع‌رسانی به کاربر نمایش داده می‌شوند. وقتی کاربر روی اطلاع‌رسانی ضربه می‌زند، برنامه شما اجرا می‌شود.
  • بار داده: زمانی که بار داده مجموعه‌ای از جفت‌های کلید یا مقدار سفارشی را دارد. این بار داده به عنوان داده به برنامه Wear OS شما تحویل داده می‌شود.

برای اطلاعات بیشتر و نمونه‌هایی از payloadها، به انواع پیام مراجعه کنید.

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

استفاده از سرویس‌های پس‌زمینه

برای اطمینان از اجرای صحیح وظایف پس‌زمینه، آنها باید Doze و App Standby را در نظر بگیرند.

وقتی صفحه نمایش برای مدت زمان طولانی خاموش می‌شود یا وارد حالت محیطی می‌شود، زیرمجموعه‌ای از Doze می‌تواند رخ دهد و وظایف پس‌زمینه می‌توانند برای دوره‌های خاصی به تعویق بیفتند. بعداً، وقتی دستگاه برای مدت طولانی ثابت باشد، Doze منظم رخ می‌دهد. درخواست‌ها را با WorkManager API زمان‌بندی کنید، که به برنامه شما اجازه می‌دهد برای اجرای کد Doze-safe ثبت نام کند.

زمانبندی با محدودیت‌ها

شما می‌توانید از قیدها (Constraints) برای پیکربندی درخواست‌ها به گونه‌ای که عمر باتری را حفظ کند، استفاده کنید. یک یا چند مورد از قیدهای زیر را برای گنجاندن در درخواست‌های خود انتخاب کنید:

  • درخواستی را که نیاز به شبکه‌سازی دارد، برنامه‌ریزی کنید.

    مشخص کنید که NetworkType CONNECTED ) باشد یا UNMETERED . UNMETERED ) برای انتقال داده‌های بزرگ و CONNECTED برای انتقال داده‌های کوچک است.

  • هنگام شارژ، درخواست خود را برنامه‌ریزی کنید.

  • درخواست را در حالی که دستگاه در حالت بیکار است، زمان‌بندی کنید. این برای کارهای پس‌زمینه یا همگام‌سازی با اولویت پایین‌تر، به خصوص زمانی که دستگاه در حال شارژ است، مفید است.

برای اطلاعات بیشتر، راهنمای دوره‌ای «اثر محدودیت‌ها بر کار» در WorkManager را مرور کنید.