ওয়াচ ফেস পুশ আপনার অ্যাপকে একটি Wear OS ডিভাইসে ঘড়ির মুখগুলি পরিচালনা করতে দেয়। এর মধ্যে রয়েছে ঘড়ির মুখগুলি যোগ করা, আপডেট করা এবং অপসারণ করা, সেইসাথে সক্রিয় ঘড়ির মুখ সেট করা৷ ওয়াচ ফেস পুশ API ব্যবহার করতে আপনার Wear OS অ্যাপ কনফিগার করুন।
সেটআপ
প্রয়োজনীয় নির্ভরতা অন্তর্ভুক্ত করুন:
implementation("androidx.wear.watchface:watchface-push:1.3.0-alpha07")
আপনার AndroidManifest.xml
এ নিম্নলিখিত যোগ করুন:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Required to use the Watch Face Push API. -->
<uses-permission android:name="com.google.wear.permission.PUSH_WATCH_FACES" />
<!-- Required to be able to call the setWatchFaceAsActive() method. -->
<uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
</manifest>
ম্যানেজার উদাহরণের একটি রেফারেন্স পান
WatchFacePushManager
এর একটি উদাহরণ প্রাপ্ত করুন:
val manager = WatchFacePushManager(context)
WatchFacePushManager
ওয়াচ ফেস পুশের সাথে ইন্টারঅ্যাক্ট করার জন্য সমস্ত পদ্ধতিতে অ্যাক্সেস সরবরাহ করে।
স্লট সঙ্গে কাজ
ওয়াচ ফেস পুশের সাথে কাজ করার সময় একটি মূল ধারণা হল স্লট । স্লট হল ইনস্টল করা ঘড়ির মুখগুলিকে সম্বোধন করার একটি উপায় যা আপনার অ্যাপ্লিকেশনের অন্তর্গত। সিস্টেম একটি মার্কেটপ্লেসে থাকতে পারে এমন সর্বোচ্চ সংখ্যক স্লট সেট করে; Wear OS 6 এর সাথে, সীমা হল 1।
ঘড়ির মুখ আপডেট করার সময় বা অপসারণ করার সময়, slotId
ব্যবহার করা হয় ঘড়ির মুখটি সনাক্ত করতে যাতে অপারেশনটি করা হয়।
ঘড়ির মুখের তালিকা করুন
ইনস্টল করা ঘড়ির মুখগুলির সেট তালিকাভুক্ত করতে, listWatchFaces()
ব্যবহার করুন :
val response = watchFacePushManager.listWatchFaces()
val installedList = response.installedWatchFaceDetails
val remainingSlots = response.remainingSlots
এটি আপনাকে স্লট উপলব্ধ কিনা তা নির্ধারণ করতে দেয়, বা অন্য একটি ঘড়ির মুখ যোগ করার জন্য বিদ্যমান একটি প্রতিস্থাপন প্রয়োজন কিনা। তালিকাটি আপনাকে ইনস্টল করা ঘড়ির মুখ সম্পর্কে বিশদও দেয়। উদাহরণস্বরূপ, একটি প্রদত্ত ঘড়ির মুখ প্যাকেজ ইনস্টল করা আছে কিনা তা পরীক্ষা করতে:
suspend fun isInstalled(packageName: String) = watchFacePush.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: AddWatchFaceException) {
// Something went wrong adding the watch face.
}
একটি ঘড়ির মুখ আপডেট করুন
একটি ঘড়ির মুখ আপডেট করা আপনাকে একটি প্রদত্ত স্লটের বিষয়বস্তু একটি নতুন প্যাকেজের সাথে প্রতিস্থাপন করতে দেয়৷ এটি হয় একই ঘড়ির মুখটিকে একটি নতুন সংস্করণে আপগ্রেড করা হতে পারে বা ঘড়ির মুখটিকে অন্যটির সাথে সম্পূর্ণরূপে প্রতিস্থাপন করতে পারে৷
// 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
try {
watchFacePushManager.updateWatchFace(slotId, redParcelFileDesc, redValidationToken)
} catch (e: UpdateWatchFaceException) {
// Something went wrong updating the watch face.
}
একটি ঘড়ির মুখ সরান
ঘড়ির মুখ অপসারণ করতে:
// Remove the com.example.watchfacepush.green watch face.
val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails.
firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId
try {
watchFacePushManager.removeWatchFace(slotId)
} catch (e: RemoveWatchFaceException) {
// Something went wrong removing the watch face.
}
এটি নিশ্চিত করবে যে আপনার ঘড়ির মুখটি সর্বদা সিস্টেম ঘড়ির মুখ চয়নকারীতে পাওয়া যাবে, আপনার লোগোটিকে বিশিষ্টভাবে বৈশিষ্ট্যযুক্ত করতে পারে এবং এমনকি ফোনে আপনার মার্কেটপ্লেস অ্যাপ চালু করার জন্য একটি বোতামও বৈশিষ্ট্যযুক্ত করতে পারে৷
আপনার ঘড়ির মুখ সক্রিয় কিনা তা পরীক্ষা করুন
ব্যবহারকারীর একটি মসৃণ অভিজ্ঞতা আছে তা নিশ্চিত করার জন্য আপনার মার্কেটপ্লেসে সক্রিয় ঘড়ির মুখ সেট আছে কিনা তা নির্ধারণ করা গুরুত্বপূর্ণ: যদি মার্কেটপ্লেসে ইতিমধ্যেই সক্রিয় ঘড়ির মুখ সেট থাকে, তাহলে ব্যবহারকারী যদি অন্য একটি ঘড়ির মুখ বেছে নিতে চান, তাহলে এটি কার্যকর করার জন্য তাদের শুধুমাত্র মার্কেটপ্লেস অ্যাপের মাধ্যমে বর্তমানটিকে প্রতিস্থাপন করতে হবে। যাইহোক, যদি মার্কেটপ্লেসে সক্রিয় ঘড়ির মুখ সেট না থাকে, তাহলে ফোন অ্যাপটিকে অবশ্যই ব্যবহারকারীকে আরও নির্দেশিকা দিতে হবে। এই ব্যবহারকারীর অভিজ্ঞতা কীভাবে পরিচালনা করবেন সে সম্পর্কে আরও বিশদ বিবরণের জন্য ফোন অ্যাপের বিভাগটি দেখুন।
মার্কেটপ্লেসে সক্রিয় ঘড়ির মুখ সেট আছে কিনা তা নির্ধারণ করতে:
একটি ডিফল্ট ঘড়ি মুখ সরবরাহ করুন
ওয়াচ ফেস পুশ আপনার মার্কেটপ্লেস অ্যাপ ইনস্টল করা হলে একটি ডিফল্ট ওয়াচ ফেস ইনস্টল করার ক্ষমতা প্রদান করে। এটি নিজে থেকেই সেই ডিফল্ট ঘড়ির মুখটি সক্রিয় হিসাবে সেট করে না (সক্রিয় ঘড়ির মুখ সেট করা দেখুন), তবে আপনার ঘড়ির মুখটি সিস্টেম ঘড়ির মুখ চয়নকারীতে উপলব্ধ রয়েছে তা নিশ্চিত করবে৷
এই বৈশিষ্ট্যটি ব্যবহার করতে:
- আপনার Wear OS অ্যাপ বিল্ডে, পাথে ডিফল্ট ঘড়ির মুখ অন্তর্ভুক্ত করুন:
assets/default_watchface.apk
আপনার
AndroidManifest.xml
এ নিম্নলিখিত এন্ট্রি যোগ করুন<application ...> <meta-data android:name="com.google.android.wearable.marketplace.DEFAULT_WATCHFACE_VALIDATION_TOKEN" android:value="@string/default_wf_token" />
সক্রিয় ঘড়ির মুখ সেট করুন
ওয়াচ ফেস পুশ মার্কেটপ্লেস অ্যাপকে সক্রিয় ঘড়ির মুখ সেট করার উপায় সরবরাহ করে।
এর অর্থ বিশেষভাবে যে অ্যাপটি সক্রিয় ঘড়ির মুখটি বাজারের সাথে সম্পর্কিত একটির সাথে সেট করতে পারে যেখানে বর্তমান সক্রিয় ঘড়ির মুখটি বাজারের অন্তর্গত নয়৷ নোট করুন যে মার্কেটপ্লেসে ইতিমধ্যেই সক্রিয় ঘড়ির মুখ রয়েছে, এটিকে অন্য ঘড়ির মুখে পরিবর্তন করার জন্য updateWatchFace
জন্য একটি কলের মাধ্যমে ঘড়ির মুখের স্লটের বিষয়বস্তু অন্য ঘড়ির মুখ দিয়ে প্রতিস্থাপন করা হয়৷
সক্রিয় ঘড়ির মুখ সেট করা একটি দুই-পর্যায়ের প্রক্রিয়া:
- সক্রিয় ঘড়ির মুখ সেট করার জন্য প্রয়োজনীয় Android অনুমতি অর্জন করুন।
-
setWatchFaceAsActive
পদ্ধতিতে কল করুন।
সক্রিয় ঘড়ির মুখ সেট করার অনুমতি নিন
প্রয়োজনীয় অনুমতি হল SET_PUSHED_WATCH_FACE_AS_ACTIVE
, যা অবশ্যই আপনার ম্যানিফেস্টে যোগ করতে হবে:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
</manifest>
যেহেতু এটি একটি রানটাইম অনুমতি, তাই অ্যাপটি চালানোর সময় আপনার অ্যাপটিকে অবশ্যই ব্যবহারকারীর কাছ থেকে এই অনুমতির অনুরোধ করতে হবে (এতে সাহায্য করার জন্য অ্যাকমপ্যানিস্ট লাইব্রেরি বিবেচনা করুন)।
ঘড়ির মুখ সক্রিয় হিসাবে সেট করুন
একবার অনুমতি দেওয়া হয়ে গেলে, ওয়াচ ফেসের স্লট আইডিতে setWatchFaceAsActive
কল করুন যা সক্রিয় হওয়া উচিত:
watchFacePushManager.setWatchFaceAsActive(slotId)
একবার এই অর্থটি ব্যবহার করা হয়ে গেলে, আপনার ফোন অ্যাপটির পরিবর্তে কীভাবে সক্রিয় ঘড়ির মুখটি ম্যানুয়ালি সেট করা যায় সে সম্পর্কে নির্দেশিকা দেওয়া উচিত।
আপনার ওয়াচ ফেস 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" />
একটি কাস্টম প্রপার্টি ব্যবহার করা আপনার অ্যাপকে এই ভেরিয়েন্টগুলির মধ্যে কোনটি ইনস্টল করা আছে তা নির্ধারণ করতে দেয়:
watchFaceDetails
.getMetaDataValues("com.myapp.watchfacepush.mywatchface.default_color")
.invoke()
বিবেচনা
আপনার অ্যাপে ওয়াচ ফেস পুশ প্রয়োগ করার সময় গুরুত্বপূর্ণ বিবেচনার মধ্যে রয়েছে পাওয়ার খরচ, ক্যাশিং, বান্ডিল করা ঘড়ির মুখগুলি আপডেট করা এবং একটি প্রতিনিধি ডিফল্ট ঘড়ির মুখ প্রদানের উপর ফোকাস করা।
শক্তি
Wear OS-এ চলে এমন যেকোন অ্যাপের জন্য একটি মূল বিবেচনা হল পাওয়ার খরচ। আপনার মার্কেটপ্লেস অ্যাপের Wear OS কম্পোনেন্টের জন্য:
- আপনার অ্যাপটি যতটা সম্ভব কম এবং কদাচিৎ চালানো উচিত (ব্যবহারকারীর সাথে সরাসরি ইন্টারঅ্যাক্ট না হওয়া পর্যন্ত)। এর মধ্যে রয়েছে:
- ফোন অ্যাপ থেকে অ্যাপের জাগরণ মিনিমাইজ করা
- WorkManager কাজ চালানোর ন্যূনতম
- ঘড়িটি কখন চার্জ হচ্ছে তার জন্য কোনো বিশ্লেষণ প্রতিবেদনের সময়সূচী করুন :
- আপনি Wear OS অ্যাপ বা অন্য কোনও মেট্রিক্স থেকে ব্যবহারের পরিসংখ্যান রিপোর্ট করতে চাইলে,
requiresCharging
সীমাবদ্ধতার সাথে WorkManager ব্যবহার করুন।
- আপনি Wear OS অ্যাপ বা অন্য কোনও মেট্রিক্স থেকে ব্যবহারের পরিসংখ্যান রিপোর্ট করতে চাইলে,
- ঘড়িটি কখন চার্জ হচ্ছে এবং ওয়াইফাই ব্যবহার করার জন্য আপডেটের সময়সূচী করুন :
- আপনি ইনস্টল করা ঘড়ির মুখগুলির সংস্করণগুলি পরীক্ষা করতে এবং সেগুলি স্বয়ংক্রিয়ভাবে আপডেট করতে চাইতে পারেন৷ আবার,
requiresCharging
সীমাবদ্ধতা এবংrequiresNetworkType
জন্যUNMETERED
নেটওয়ার্ক প্রকার ব্যবহার করুন। - চার্জে থাকা অবস্থায়, ডিভাইসটির Wi-Fi-এ অ্যাক্সেস থাকতে পারে। আপডেট করা APK দ্রুত ডাউনলোড করতে Wi-Fi-এর অনুরোধ করুন , এবং হয়ে গেলে নেটওয়ার্ক ছেড়ে দিন।
- এই একই নির্দেশিকা প্রযোজ্য যেখানে মার্কেটপ্লেস দিনের একটি ঘড়ির মুখ দিতে পারে; ঘড়ি চার্জ করার সময় এটি আগে থেকে ডাউনলোড করুন।
- আপনি ইনস্টল করা ঘড়ির মুখগুলির সংস্করণগুলি পরীক্ষা করতে এবং সেগুলি স্বয়ংক্রিয়ভাবে আপডেট করতে চাইতে পারেন৷ আবার,
- সক্রিয় ঘড়ির মুখ পরীক্ষা করার জন্য কাজের সময়সূচী করবেন না :
- আপনার মার্কেটপ্লেসে এখনও সক্রিয় ঘড়ির মুখ আছে কিনা এবং কোন ঘড়ির মুখটি এটি ব্যাটারিতে একটি ড্রেন রাখে তা পর্যায়ক্রমে পরীক্ষা করা। এই পদ্ধতি এড়িয়ে চলুন.
- ঘড়িতে বিজ্ঞপ্তি ব্যবহার করবেন না :
- যদি আপনার অ্যাপ বিজ্ঞপ্তিগুলি ব্যবহার করে, তাহলে এগুলিকে ফোনে ফোকাস করুন, যেখানে ব্যবহারকারীর অ্যাকশন যাত্রা চালিয়ে যেতে ফোন অ্যাপটি খুলে দেয়।
setLocalOnly
ব্যবহার করে এগুলি ঘড়ি অ্যাপের সাথে সংযুক্ত না হয় তা নিশ্চিত করুন।
- যদি আপনার অ্যাপ বিজ্ঞপ্তিগুলি ব্যবহার করে, তাহলে এগুলিকে ফোনে ফোকাস করুন, যেখানে ব্যবহারকারীর অ্যাকশন যাত্রা চালিয়ে যেতে ফোন অ্যাপটি খুলে দেয়।
ক্যাশিং
ক্যানোনিকাল মার্কেটপ্লেস উদাহরণে, ঘড়ির মুখগুলি ফোন থেকে ঘড়িতে স্থানান্তরিত হয়। এই সংযোগটি সাধারণত একটি ব্লুটুথ সংযোগ, যা বেশ ধীর হতে পারে।
উভয়ই একটি ভাল ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে এবং পুনরায় ট্রান্সমিশন পাওয়ার সংরক্ষণ করতে, কিছুসংখ্যক APK সঞ্চয় করতে Wear OS ডিভাইসে একটি ছোট ক্যাশে প্রয়োগ করার কথা বিবেচনা করুন।
সেক্ষেত্রে যেখানে ব্যবহারকারী অন্য ঘড়ির মুখ চেষ্টা করে কিন্তু তারপর তাদের পূর্বে নির্বাচিত ঘড়ির মুখের দিকে ফিরে যাওয়ার সিদ্ধান্ত নেয়, এই ক্রিয়াটি তখন প্রায় তাত্ক্ষণিক।
একইভাবে, এটি ওয়াচ ফেস অফ দ্যা ডে বা অনুরূপ স্কিমগুলির জন্য প্রিক্যাচিংয়ের জন্য ব্যবহার করা যেতে পারে যেখানে Wear OS ডিভাইস চার্জ করার সময় ঘড়ির মুখগুলি ডাউনলোড করা হয়।
বান্ডিল করা ঘড়ির মুখগুলি আপডেট করুন
আপনার অ্যাপে পূর্বে বর্ণিত একটি ডিফল্ট ঘড়ির মুখ সম্পদ অন্তর্ভুক্ত থাকতে পারে। এটা চিনতে হবে যে, আপনার মার্কেটপ্লেস অ্যাপ ইনস্টল করার সময় এই ঘড়ির মুখটি সিস্টেমে ইনস্টল করার সময়, আপনার মার্কেটপ্লেস অ্যাপের কোনো আপডেটের সাথে একটি নতুন সংস্করণ বান্ডিল করা হলে ঘড়ির মুখটি আপডেট করা হয় না।
এই পরিস্থিতি মোকাবেলা করার জন্য, আপনার মার্কেটপ্লেস অ্যাপের MY_PACKAGE_REPLACED
সম্প্রচার অ্যাকশন শোনা উচিত এবং প্যাকেজ সম্পদ থেকে যেকোনো বান্ডিল ওয়াচ ফেস আপডেট করার প্রয়োজন আছে কিনা তা পরীক্ষা করা উচিত।
রিপ্রেজেন্টেটিভ ডিফল্ট ঘড়ির মুখ
একটি ডিফল্ট ঘড়ির মুখ আপনার ব্যবহারকারীদের আপনার মার্কেটপ্লেস আবিষ্কার এবং ব্যবহার করতে সাহায্য করার একটি দুর্দান্ত উপায়: যখন আপনার মার্কেটপ্লেস হয় তখন ঘড়ির মুখটি ইনস্টল করা হয়, যাতে ব্যবহারকারীরা এটিকে ঘড়ির মুখ গ্যালারিতে খুঁজে পেতে পারেন৷
ডিফল্ট ঘড়ির মুখগুলির সাথে কাজ করার সময় কিছু বিবেচনা:
- ব্যবহারকারী আপনার মার্কেটপ্লেস অ্যাপ থেকে ওয়াচ ফেস আনইনস্টল করতে চাইলে
removeWatchFace
ব্যবহার করবেন না। পরিবর্তে, এই ক্ষেত্রে,updateWatchFace
ব্যবহার করে ঘড়ির মুখটিকে ডিফল্ট ঘড়ির মুখে ফিরিয়ে দিন। এটি ব্যবহারকারীদের আপনার ঘড়ির মুখ সনাক্ত করতে এবং গ্যালারি থেকে সেট করতে সহায়তা করে৷ - আপনার লোগো এবং থিমিংয়ের মাধ্যমে ডিফল্ট ঘড়ির মুখকে সহজ এবং তাত্ক্ষণিকভাবে স্বীকৃত করুন৷ এটি ব্যবহারকারীদের ওয়াচ ফেস গ্যালারিতে এটি খুঁজে পেতে সহায়তা করে৷
ফোন অ্যাপ খুলতে ডিফল্ট ঘড়ির মুখে একটি বোতাম যোগ করুন। এটি দুটি পর্যায়ে অর্জন করা যেতে পারে:
Wear OS অ্যাপ ব্যবহার করে একটি উদ্দেশ্য চালু করতে ঘড়ির মুখে একটি
Launch
উপাদান যোগ করুন, উদাহরণস্বরূপ:<Launch target="com.myapp/com.myapp.LaunchOnPhoneActivity" />
LaunchOnPhoneActivity
এ,RemoteActivityHelper
ব্যবহার করে ফোন অ্যাপ চালু করুন।