ওয়াচ ফেস পুশ আপনার অ্যাপকে একটি Wear OS ডিভাইসে ওয়াচ ফেস পরিচালনা করতে দেয়। এর মধ্যে ওয়াচ ফেস যোগ করা, আপডেট করা এবং অপসারণ করা, সেইসাথে সক্রিয় ওয়াচ ফেস সেট করা অন্তর্ভুক্ত। ওয়াচ ফেস পুশ API ব্যবহার করার জন্য আপনার Wear OS অ্যাপটি কনফিগার করুন।
সেটআপ
আপনার build.gradle.kts ফাইলে androidx.wear.watchfacepush:watchfacepush নির্ভরতা অন্তর্ভুক্ত করুন।
আপনার AndroidManifest.xml এ নিম্নলিখিতটি যোগ করুন:
<!-- Required to use the Watch Face Push API. --> <uses-permission android:name="com.google.wear.permission.PUSH_WATCH_FACES" />
ম্যানেজার ইনস্ট্যান্সের একটি রেফারেন্স পান
WatchFacePushManager এর একটি উদাহরণ পান:
val watchFacePushManager = WatchFacePushManagerFactory.createWatchFacePushManager(context)
WatchFacePushManager ওয়াচ ফেস পুশের সাথে ইন্টারঅ্যাক্ট করার জন্য সমস্ত পদ্ধতিতে অ্যাক্সেস প্রদান করে।
স্লট নিয়ে কাজ করুন
ওয়াচ ফেস পুশের সাথে কাজ করার সময় একটি মূল ধারণা হল স্লট । স্লট হল আপনার অ্যাপ্লিকেশনের সাথে সম্পর্কিত ইনস্টল করা ওয়াচ ফেসগুলিকে সম্বোধন করার একটি উপায়। সিস্টেমটি একটি মার্কেটপ্লেসে সর্বাধিক সংখ্যক স্লট রাখতে পারে তা নির্ধারণ করে; Wear OS 6 এর সাথে, সীমা হল 1।
একটি ওয়াচফেস আপডেট বা অপসারণ করার সময়, slotId ব্যবহার করা হয় ওয়াচফেসটি সনাক্ত করতে যার উপর অপারেশন করা হবে।
ওয়াচফেস তালিকাভুক্ত করুন
ইনস্টল করা ওয়াচফেসের সেট তালিকাভুক্ত করতে, listWatchFaces() ব্যবহার করুন:
val response = watchFacePushManager.listWatchFaces() val installedList = response.installedWatchFaceDetails installedList.forEach { Log.i(TAG, "Installed watchface: ${it.packageName}") } val remainingSlots = response.remainingSlotCount Log.i(TAG, "Remaining slots: $remainingSlots")
এর মাধ্যমে আপনি নির্ধারণ করতে পারবেন যে স্লটটি উপলব্ধ কিনা, অথবা অন্য একটি ওয়াচফেস যোগ করার জন্য বিদ্যমান ওয়াচফেসটি প্রতিস্থাপন করতে হবে কিনা। তালিকাটি আপনাকে ইনস্টল করা ওয়াচফেস সম্পর্কেও বিশদ বিবরণ দেয়। উদাহরণস্বরূপ, একটি প্রদত্ত ওয়াচফেস প্যাকেজ ইনস্টল করা আছে কিনা তা পরীক্ষা করতে:
suspend fun isInstalled(packageName: String) = watchFacePushManager.listWatchFaces() .installedWatchFaceDetails.any { it.packageName == packageName }
একটি ওয়াচফেস যোগ করুন
যদি listWatchFaces প্রতিক্রিয়া দ্বারা নির্ধারিত স্লট উপলব্ধ থাকে, তাহলে addWatchFace() পদ্ধতিটি ব্যবহার করা উচিত:
try { // Supply the validation token along with the watch face package data itself. val slot = watchFacePushManager.addWatchFace(parcelFileDescriptor, token) Log.i(TAG, "${slot.packageName} (${slot.versionCode}) added in slot ${slot.slotId}") } catch (e: WatchFacePushManager.AddWatchFaceException) { Log.e(TAG, "Something went wrong installing the watch face", e) }
একটি ওয়াচফেস আপডেট করুন
একটি ওয়াচফেস আপডেট করলে আপনি একটি নির্দিষ্ট স্লটের বিষয়বস্তু একটি নতুন প্যাকেজ দিয়ে প্রতিস্থাপন করতে পারবেন। এটি হয় একই ওয়াচফেসটিকে একটি নতুন সংস্করণে আপগ্রেড করা হতে পারে অথবা সম্পূর্ণরূপে অন্য একটি ওয়াচফেস দিয়ে প্রতিস্থাপন করা হতে পারে।
// Replacing the com.example.watchfacepush.green watch face with // com.example.watchfacepush.red val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails .firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId ?: throw IllegalArgumentException("No green watch face found") try { watchFacePushManager.updateWatchFace(slotId, redParcelFileDesc, redValidationToken) } catch (e: WatchFacePushManager.UpdateWatchFaceException) { Log.e(TAG, "Something went wrong updating the watch face", e) }
একটি ওয়াচফেস সরান
একটি ওয়াচফেস সরাতে:
// Remove the com.example.watchfacepush.green watch face. val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails .firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId ?: throw IllegalArgumentException("No green watch face found") try { watchFacePushManager.removeWatchFace(slotId) } catch (e: WatchFacePushManager.RemoveWatchFaceException) { Log.e(TAG, "Something went wrong removing the watch face", e) }
এই পদ্ধতির অর্থ হল আপনার ওয়াচফেসটি সর্বদা সিস্টেম ওয়াচফেস পিকারে পাওয়া যাবে। আপনি আপনার লোগোটি স্পষ্টভাবে প্রদর্শন করতে পারেন, এমনকি ফোনে আপনার মার্কেটপ্লেস অ্যাপটি চালু করার জন্য একটি বোতামও রাখতে পারেন।
আপনার ওয়াচফেস সক্রিয় কিনা তা পরীক্ষা করুন
ব্যবহারকারীর অভিজ্ঞতা মসৃণ করার জন্য আপনার মার্কেটপ্লেসে সক্রিয় ওয়াচ ফেস সেট আছে কিনা তা নির্ধারণ করা গুরুত্বপূর্ণ: যদি মার্কেটপ্লেসে ইতিমধ্যেই সক্রিয় ওয়াচ ফেস সেট থাকে, তাহলে ব্যবহারকারী যদি অন্য ওয়াচ ফেস বেছে নিতে চান, তাহলে এটি কার্যকর করার জন্য তাদের শুধুমাত্র মার্কেটপ্লেস অ্যাপের মাধ্যমে বর্তমান ওয়াচ ফেসটি প্রতিস্থাপন করতে হবে। তবে, যদি মার্কেটপ্লেসে সক্রিয় ওয়াচ ফেস সেট না থাকে, তাহলে ফোন অ্যাপটি ব্যবহারকারীকে আরও নির্দেশিকা প্রদান করবে। এই ব্যবহারকারীর অভিজ্ঞতা কীভাবে পরিচালনা করবেন সে সম্পর্কে আরও বিস্তারিত জানার জন্য ফোন অ্যাপের বিভাগটি দেখুন।
মার্কেটপ্লেসে সক্রিয় ওয়াচফেস সেট আছে কিনা তা নির্ধারণ করতে, নিম্নলিখিত যুক্তি ব্যবহার করুন:
suspend fun hasActiveWatchFace() = watchFacePushManager.listWatchFaces() .installedWatchFaceDetails .any { watchFacePushManager.isWatchFaceActive(it.packageName) }
একটি ডিফল্ট ওয়াচফেস সরবরাহ করুন
আপনার মার্কেটপ্লেস অ্যাপ ইনস্টল করার সময় ওয়াচ ফেস পুশ একটি ডিফল্ট ওয়াচ ফেস ইনস্টল করার ক্ষমতা প্রদান করে। এটি নিজে থেকে সেই ডিফল্ট ওয়াচ ফেসটিকে সক্রিয় হিসাবে সেট করে না (সক্রিয় ওয়াচ ফেস সেট করা দেখুন), তবে আপনার ওয়াচ ফেসটিকে সিস্টেম ওয়াচ ফেস পিকারে উপলব্ধ করে।
এই বৈশিষ্ট্যটি ব্যবহার করতে:
- আপনার Wear OS অ্যাপ বিল্ডে, পাথে ডিফল্ট ওয়াচফেস অন্তর্ভুক্ত করুন:
assets/default_watchface.apk আপনার
AndroidManifest.xmlএ নিম্নলিখিত এন্ট্রিটি যোগ করুন<meta-data android:name="com.google.android.wearable.marketplace.DEFAULT_WATCHFACE_VALIDATION_TOKEN" android:value="@string/default_wf_token" />
সক্রিয় ওয়াচফেস সেট করুন
ওয়াচ ফেস পুশ মার্কেটপ্লেস অ্যাপটিকে সক্রিয় ওয়াচ ফেস সেট করার উপায় প্রদান করে।
এর অর্থ হল, অ্যাপটি সক্রিয় ওয়াচ ফেসটিকে মার্কেটপ্লেসের সাথে সম্পর্কিত একটিতে সেট করতে পারে যেখানে বর্তমান সক্রিয় ওয়াচ ফেসটি মার্কেটপ্লেসের সাথে সম্পর্কিত নয়। মনে রাখবেন যে, যেখানে মার্কেটপ্লেসে ইতিমধ্যেই সক্রিয় ওয়াচ ফেস রয়েছে, সেখানে ওয়াচ ফেস স্লটের বিষয়বস্তু অন্য একটি ওয়াচ ফেস দিয়ে প্রতিস্থাপন করার জন্য updateWatchFace কলের মাধ্যমে এটিকে অন্য ওয়াচ ফেসে পরিবর্তন করা হয়।
সক্রিয় ঘড়ির মুখ সেট করা একটি দুই-পর্যায়ের প্রক্রিয়া:
- সক্রিয় ওয়াচফেস সেট করার জন্য প্রয়োজনীয় অ্যান্ড্রয়েড অনুমতি অর্জন করুন।
-
setWatchFaceAsActiveপদ্ধতিটি কল করুন।
সক্রিয় ওয়াচফেস সেট করার জন্য অনুমতি নিন
প্রয়োজনীয় অনুমতি হল SET_PUSHED_WATCH_FACE_AS_ACTIVE , যা আপনার ম্যানিফেস্টে যোগ করতে হবে:
<!-- Required to be able to call the setWatchFaceAsActive() method. --> <uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
যেহেতু এটি একটি রানটাইম অনুমতি, তাই অ্যাপটি চলাকালীন আপনার অ্যাপটিকে ব্যবহারকারীর কাছ থেকে এই অনুমতির জন্য অনুরোধ করতে হবে (এতে সহায়তা করার জন্য Accompanist লাইব্রেরি বিবেচনা করুন)।
ওয়াচফেসটি সক্রিয় হিসেবে সেট করুন
অনুমতি মঞ্জুর হয়ে গেলে, যে ওয়াচফেসটি সক্রিয় থাকা উচিত তার স্লট আইডিতে setWatchFaceAsActive কল করুন।
একবার এই উপায়টি ব্যবহার করা হয়ে গেলে, আপনার ফোন অ্যাপটি কীভাবে ম্যানুয়ালি সক্রিয় ওয়াচফেস সেট করবেন সে সম্পর্কে নির্দেশিকা প্রদান করবে।
আপনার ওয়াচফেস APK থেকে অতিরিক্ত মেটাডেটা পড়ুন
WatchFaceSlot অবজেক্টটি আপনার ওয়াচফেসে ঘোষণা করতে পারেন এমন অতিরিক্ত তথ্য পাওয়ার উপায়ও প্রদান করে।
এটি বিশেষ করে এমন পরিস্থিতিতে কার্যকর হতে পারে যেখানে আপনার একই ওয়াচফেসের ছোটখাটো রূপ রয়েছে। উদাহরণস্বরূপ, আপনি একটি ওয়াচফেস সংজ্ঞায়িত করতে পারেন:
- প্যাকেজের নাম:
com.myapp.watchfacepush.mywatchface - প্যাকেজ সংস্করণ:
1.0.0
কিন্তু এই ওয়াচফেসটি চারটি ভিন্ন APK হিসেবে আসতে পারে, যেখানে সবগুলোই প্রায় একই রকম, কিন্তু ভিন্ন ডিফল্ট রঙ সহ: লাল, হলুদ, সবুজ এবং নীল , ওয়াচফেস ফর্ম্যাট XML-এ একটি ColorConfiguration সেট করা।
এই সামান্য পরিবর্তনটি চারটি APK-এর প্রতিটিতে প্রতিফলিত হয়:
<!-- For watch face com.myapp.watchfacepush.mywatchface --> <property android:name="default_color" android:value="red" />
একটি কাস্টম প্রপার্টি ব্যবহার করলে আপনার অ্যাপটি এই ভেরিয়েন্টগুলির মধ্যে কোনটি ইনস্টল করা আছে তা নির্ধারণ করতে পারে:
val color = watchFaceDetails .getMetaData("com.myapp.watchfacepush.mywatchface.default_color") .invoke() Log.i(TAG, "Default color: $color")
বিবেচনা
আপনার অ্যাপে ওয়াচ ফেস পুশ বাস্তবায়নের সময় গুরুত্বপূর্ণ বিবেচ্য বিষয়গুলির মধ্যে রয়েছে বিদ্যুৎ খরচ, ক্যাশিং, বান্ডেলড ওয়াচ ফেস আপডেট করা এবং একটি প্রতিনিধিত্বমূলক ডিফল্ট ওয়াচ ফেস প্রদানের উপর মনোযোগ দেওয়া।
ক্ষমতা
Wear OS-এ চলা যেকোনো অ্যাপের জন্য একটি গুরুত্বপূর্ণ বিবেচ্য বিষয় হল বিদ্যুৎ খরচ। আপনার মার্কেটপ্লেস অ্যাপের Wear OS উপাদানের জন্য:
- আপনার অ্যাপটি যতটা সম্ভব কম এবং কম সময়ে চালানো উচিত (যদি না ব্যবহারকারী সরাসরি এর সাথে যোগাযোগ করে)। এর মধ্যে রয়েছে:
- ফোন অ্যাপ থেকে অ্যাপটি জাগানোর পরিমাণ কমানো
- ওয়ার্কম্যানেজার কাজের সংখ্যা কমানো
- ঘড়িটি কখন চার্জ হচ্ছে তার জন্য যেকোনো বিশ্লেষণ প্রতিবেদন নির্ধারণ করুন :
- আপনি যদি Wear OS অ্যাপ বা অন্য কোনও মেট্রিক্স থেকে ব্যবহারের পরিসংখ্যান রিপোর্ট করতে চান, তাহলে
requiresChargingসীমাবদ্ধতা সহ WorkManager ব্যবহার করুন।
- আপনি যদি Wear OS অ্যাপ বা অন্য কোনও মেট্রিক্স থেকে ব্যবহারের পরিসংখ্যান রিপোর্ট করতে চান, তাহলে
- ঘড়িটি কখন চার্জ হচ্ছে তার আপডেট নির্ধারণ করুন এবং ওয়াইফাই ব্যবহার করুন :
- আপনি ইনস্টল করা ওয়াচফেসের সংস্করণগুলি পরীক্ষা করে স্বয়ংক্রিয়ভাবে আপডেট করতে চাইতে পারেন। আবার,
requiresChargingসীমাবদ্ধতা এবংrequiresNetworkTypeএর জন্যUNMETEREDনেটওয়ার্ক প্রকার ব্যবহার করুন। - চার্জে থাকা অবস্থায়, ডিভাইসটিতে Wi-Fi অ্যাক্সেস থাকার সম্ভাবনা বেশি। আপডেট করা APK গুলি দ্রুত ডাউনলোড করার জন্য Wi-Fi অনুরোধ করুন এবং সম্পন্ন হলে নেটওয়ার্কটি ছেড়ে দিন।
- এই একই নির্দেশিকা সেইসব ক্ষেত্রে প্রযোজ্য যেখানে মার্কেটপ্লেস দিনের সেরা ওয়াচফেস অফার করতে পারে; ঘড়িটি চার্জ করার সময় এটি আগে থেকে ডাউনলোড করুন।
- আপনি ইনস্টল করা ওয়াচফেসের সংস্করণগুলি পরীক্ষা করে স্বয়ংক্রিয়ভাবে আপডেট করতে চাইতে পারেন। আবার,
- সক্রিয় ওয়াচফেস চেক করার জন্য কাজের সময়সূচী নির্ধারণ করবেন না :
- আপনার মার্কেটপ্লেসে এখনও সক্রিয় ওয়াচফেস আছে কিনা এবং এটি কোন ওয়াচফেস তা পর্যায়ক্রমে পরীক্ষা করলে ব্যাটারির খরচ কমে যায়। এই পদ্ধতিটি এড়িয়ে চলুন।
- ঘড়িতে বিজ্ঞপ্তি ব্যবহার করবেন না :
- যদি আপনার অ্যাপটি নোটিফিকেশন ব্যবহার করে, তাহলে এগুলো ফোনের উপর ফোকাস করুন, যেখানে ব্যবহারকারীর অ্যাকশন ফোন অ্যাপটি খুলে যাত্রা চালিয়ে যেতে সাহায্য করে।
setLocalOnlyব্যবহার করে নোটিফিকেশনগুলিকে ওয়াচ অ্যাপের সাথে ব্রিজ না করার জন্য কনফিগার করুন।
- যদি আপনার অ্যাপটি নোটিফিকেশন ব্যবহার করে, তাহলে এগুলো ফোনের উপর ফোকাস করুন, যেখানে ব্যবহারকারীর অ্যাকশন ফোন অ্যাপটি খুলে যাত্রা চালিয়ে যেতে সাহায্য করে।
ক্যাশিং
ক্যানোনিকাল মার্কেটপ্লেসের উদাহরণে, ঘড়ির মুখগুলি ফোন থেকে ঘড়িতে স্থানান্তরিত হয়। এই সংযোগটি সাধারণত একটি ব্লুটুথ সংযোগ, যা বেশ ধীর হতে পারে।
আরও ভালো ব্যবহারকারীর অভিজ্ঞতা প্রদান এবং পুনঃপ্রচার শক্তি সংরক্ষণের জন্য, Wear OS ডিভাইসে মুষ্টিমেয় APK সংরক্ষণের জন্য একটি ছোট ক্যাশে প্রয়োগ করার কথা বিবেচনা করুন।
যদি ব্যবহারকারী অন্য ওয়াচফেস ব্যবহার করে কিন্তু তারপর তাদের পূর্বে নির্বাচিত ওয়াচফেসে ফিরে যাওয়ার সিদ্ধান্ত নেয়, তাহলে এই ক্রিয়াটি প্রায় তাৎক্ষণিকভাবে সম্পন্ন হয়।
একইভাবে, এটি ওয়াচ ফেস অফ দ্য ডে এর জন্য প্রি-ক্যাশিং বা অনুরূপ স্কিমের জন্য ব্যবহার করা যেতে পারে যেখানে Wear OS ডিভাইস চার্জ করার সময় ওয়াচ ফেস ডাউনলোড করা হয়।
বান্ডেল করা ওয়াচফেস আপডেট করুন
আপনার অ্যাপে পূর্বে বর্ণিত একটি ডিফল্ট ওয়াচফেস অ্যাসেট থাকতে পারে। এটা মনে রাখা গুরুত্বপূর্ণ যে, আপনার মার্কেটপ্লেস অ্যাপ ইনস্টল করার সময় এই ওয়াচফেসটি সিস্টেমে ইনস্টল করা থাকলেও, আপনার মার্কেটপ্লেস অ্যাপের কোনও আপডেটের সাথে নতুন সংস্করণ যুক্ত হলে ওয়াচফেসটি আপডেট হয় না।
এই পরিস্থিতি মোকাবেলা করার জন্য, আপনার মার্কেটপ্লেস অ্যাপের MY_PACKAGE_REPLACED ব্রডকাস্ট অ্যাকশনটি শোনা উচিত এবং প্যাকেজ সম্পদ থেকে কোনও বান্ডেলড ওয়াচফেস আপডেট করার প্রয়োজনীয়তা পরীক্ষা করা উচিত।
প্রতিনিধিত্বকারী ডিফল্ট ওয়াচফেস
আপনার ব্যবহারকারীদের আপনার মার্কেটপ্লেস আবিষ্কার এবং ব্যবহারে সাহায্য করার জন্য একটি ডিফল্ট ওয়াচ ফেস একটি দুর্দান্ত উপায়: আপনার মার্কেটপ্লেসটি যখন থাকে তখন ওয়াচ ফেসটি ইনস্টল করা থাকে, যাতে ব্যবহারকারীরা এটি ওয়াচ ফেস গ্যালারিতে খুঁজে পেতে পারেন।
ডিফল্ট ওয়াচফেস নিয়ে কাজ করার সময় কিছু বিবেচ্য বিষয়:
- ব্যবহারকারী যদি আপনার মার্কেটপ্লেস অ্যাপ থেকে কোনও ওয়াচ ফেস আনইনস্টল করতে চান, তাহলে
removeWatchFaceব্যবহার করবেন না। পরিবর্তে, এই ক্ষেত্রে,updateWatchFaceব্যবহার করে ওয়াচ ফেসটিকে ডিফল্ট ওয়াচ ফেসে ফিরিয়ে আনুন। এটি ব্যবহারকারীদের আপনার ওয়াচ ফেসটি সনাক্ত করতে এবং গ্যালারি থেকে সেট করতে সহায়তা করে। - আপনার লোগো এবং থিমের মাধ্যমে ডিফল্ট ওয়াচফেসটিকে সহজ এবং তাৎক্ষণিকভাবে চেনা যায়। এটি ব্যবহারকারীদের ওয়াচফেস গ্যালারিতে এটি খুঁজে পেতে সাহায্য করে।
ফোন অ্যাপটি খুলতে ডিফল্ট ওয়াচফেসে একটি বোতাম যোগ করুন। এটি দুটি ধাপে অর্জন করা যেতে পারে:
Wear OS অ্যাপ ব্যবহার করে একটি ইনটেন্ট চালু করতে ওয়াচ ফেসে একটি
Launchএলিমেন্ট যোগ করুন, উদাহরণস্বরূপ:<Launch target="com.myapp/com.myapp.LaunchOnPhoneActivity" />LaunchOnPhoneActivityতে,RemoteActivityHelperব্যবহার করে ফোন অ্যাপটি চালু করুন।