জটিলতার তথ্য প্রকাশ করুন

ডেটা প্রদানকারী অ্যাপগুলি মুখের জটিলতাগুলি দেখার জন্য তথ্য প্রকাশ করে, টেক্সট, স্ট্রিং, ছবি এবং সংখ্যা ধারণ করে এমন ক্ষেত্র সরবরাহ করে।

একটি ডেটা প্রদানকারী পরিষেবা ComplicationProviderService সরাসরি ঘড়ির মুখে দরকারী তথ্য সরবরাহ করতে প্রসারিত করে।

একটি ডেটা প্রদানকারী প্রকল্প তৈরি করুন

আপনার ডেটা প্রদানকারী অ্যাপের জন্য অ্যান্ড্রয়েড স্টুডিওতে একটি প্রকল্প তৈরি করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. ফাইল > নতুন > নতুন প্রকল্পে ক্লিক করুন।
  2. প্রজেক্ট টেমপ্লেট উইন্ডোতে, Wear OS ট্যাবে ক্লিক করুন, No Activity নির্বাচন করুন এবং Next এ ক্লিক করুন।
  3. আপনার প্রকল্প কনফিগার করুন উইন্ডোতে, আপনার প্রকল্পের নাম দিন, প্রমিত প্রকল্প তথ্য পূরণ করুন এবং সমাপ্ত ক্লিক করুন।
  4. Android Studio আপনার ডেটা প্রদানকারীর জন্য একটি অ্যাপ মডিউল সহ একটি প্রকল্প তৈরি করে। অ্যান্ড্রয়েড স্টুডিওতে প্রকল্প সম্পর্কে আরও তথ্যের জন্য, একটি প্রকল্প তৈরি করুন দেখুন।
  5. BroadcastReceiver প্রসারিত করে এমন একটি নতুন ক্লাস তৈরি করে আপনার ডেটা প্রদানকারী অ্যাপ শুরু করুন। সেই ক্লাসের উদ্দেশ্য হল Wear OS সিস্টেম থেকে জটিল আপডেটের অনুরোধ শোনা। অতিরিক্তভাবে, একটি নতুন ক্লাস তৈরি করুন যা উপযুক্ত জটিলতার অনুরোধ অনুযায়ী ডেটা প্রদানের জন্য ComplicationProviderService প্রসারিত করে। আরও তথ্যের জন্য, নিম্নলিখিত দেখুন:

    দ্রষ্টব্য: আপনার ডেটা প্রদানকারীর জন্য একটি কার্যকলাপ যোগ করা ঐচ্ছিক। উদাহরণস্বরূপ, আপনি এমন একটি ক্রিয়াকলাপ চাইতে পারেন যেটি শুধুমাত্র তখনই চালু হয় যখন ব্যবহারকারী একটি জটিলতায় ট্যাপ করে।

আপডেট অনুরোধের জন্য একটি পদ্ধতি প্রয়োগ করুন

যখন জটিল ডেটার প্রয়োজন হয়, তখন Wear OS সিস্টেম আপনার ডেটা প্রদানকারীকে আপডেটের অনুরোধ পাঠায়। অনুরোধ আপনার BroadcastReceiver দ্বারা গৃহীত হয়. আপডেটের অনুরোধে সাড়া দিতে, আপনার ডেটা প্রদানকারীকে অবশ্যই ComplicationProviderService ক্লাসের onComplicationUpdate() পদ্ধতি প্রয়োগ করতে হবে।

Wear OS সিস্টেম আপনার প্রদানকারীর কাছ থেকে ডেটার প্রয়োজন হলে onComplicationUpdate() কল করে—উদাহরণস্বরূপ, যখন আপনার প্রদানকারী ব্যবহার করে কোনো জটিলতা সক্রিয় হয় বা যখন একটি নির্দিষ্ট পরিমাণ সময় চলে যায়। এটি একটি ComplicationManager অবজেক্টকে একটি প্যারামিটার হিসাবে onComplicationUpdate এ পাস করে, যা সিস্টেমে ডেটা ফেরত পাঠাতে ব্যবহৃত হয়।

দ্রষ্টব্য: যখন আপনার ডেটা প্রদানকারী অ্যাপ ডেটা সরবরাহ করে, তখন ঘড়ির মুখ আপনার পাঠানো কাঁচা মানগুলি গ্রহণ করে যাতে এটি তথ্য আঁকতে পারে।

নিম্নলিখিত কোড স্নিপেট onComplicationUpdate পদ্ধতির একটি নমুনা বাস্তবায়ন দেখায়:

কোটলিন

override fun onComplicationUpdate(
    complicationId: Int, dataType: Int, complicationManager: ComplicationManager) {

    Log.d(TAG, "onComplicationUpdate() id: $complicationId")

    // Used to create a unique key to use with SharedPreferences for this complication.
    val thisProvider = ComponentName(this, javaClass)

    // Retrieves your data; in this case, grabs an incrementing number from SharedPrefs.
    val preferences = getSharedPreferences(ComplicationTapBroadcastReceiver.COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY, 0)

    val number = preferences.getInt(
            ComplicationTapBroadcastReceiver.getPreferenceKey(
                    thisProvider, complicationId),
                    0)
    val numberText = String.format(Locale.getDefault(), "%d!", number)

    var complicationData: ComplicationData? = null

    when (dataType) {
        ComplicationData.TYPE_SHORT_TEXT -> complicationData = ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
                .setShortText(ComplicationText.plainText(numberText))
                .build()
        else -> if (Log.isLoggable(TAG, Log.WARN)) {
                    Log.w(TAG, "Unexpected complication type $dataType")
                }
    }

    if (complicationData != null) {
        complicationManager.updateComplicationData(complicationId, complicationData)
    } else {
        // If no data is sent, we still need to inform the ComplicationManager, so
        // the update job can finish and the wake lock isn't held any longer.
        complicationManager.noUpdateRequired(complicationId)
    }
}

জাভা

@Override
public void onComplicationUpdate(
       int complicationId, int dataType, ComplicationManager complicationManager) {

   Log.d(TAG, "onComplicationUpdate() id: " + complicationId);

   // Used to create a unique key to use with SharedPreferences for this complication.
   ComponentName thisProvider = new ComponentName(this, getClass());

   // Retrieves your data; in this case, grabs an incrementing number from SharedPrefs.
   SharedPreferences preferences =
     getSharedPreferences( ComplicationTapBroadcastReceiver.COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY, 0);

   int number =
           preferences.getInt(
                   ComplicationTapBroadcastReceiver.getPreferenceKey(
                           thisProvider, complicationId),
                   0);
   String numberText = String.format(Locale.getDefault(), "%d!", number);

   ComplicationData complicationData = null;

   switch (dataType) {
       case ComplicationData.TYPE_SHORT_TEXT:
           complicationData =
                   new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
                           .setShortText(ComplicationText.plainText(numberText))
                           .build();
           break;
       default:
           if (Log.isLoggable(TAG, Log.WARN)) {
               Log.w(TAG, "Unexpected complication type " + dataType);
           }
   }

   if (complicationData != null) {
       complicationManager.updateComplicationData(complicationId, complicationData);

   } else {
       // If no data is sent, we still need to inform the ComplicationManager, so
       // the update job can finish and the wake lock isn't held any longer.
       complicationManager.noUpdateRequired(complicationId);
   }
}

ম্যানিফেস্ট ঘোষণা এবং অনুমতি

Android সিস্টেম দ্বারা ডেটা প্রদানকারী হিসাবে বিবেচিত হওয়ার জন্য ডেটা প্রদানকারী অ্যাপগুলিকে অবশ্যই তাদের অ্যাপ ম্যানিফেস্টে নির্দিষ্ট ঘোষণা অন্তর্ভুক্ত করতে হবে। এই বিভাগটি ডেটা প্রদানকারী অ্যাপের প্রয়োজনীয় সেটিংস ব্যাখ্যা করে।

আপনার অ্যাপের ম্যানিফেস্টে, পরিষেবাটি ঘোষণা করুন এবং একটি আপডেট অনুরোধ অ্যাকশন ইন্টেন্ট ফিল্টার যোগ করুন। ম্যানিফেস্টকে অবশ্যই BIND_COMPLICATION_PROVIDER অনুমতি যোগ করে পরিষেবাটিকে সুরক্ষিত করতে হবে যাতে শুধুমাত্র Wear OS সিস্টেমই প্রদানকারী পরিষেবার সাথে আবদ্ধ হতে পারে।

এছাড়াও, service উপাদানে একটি android:icon বৈশিষ্ট্য অন্তর্ভুক্ত করুন যা একটি একক রঙের সাদা আইকন প্রদান করে। আমরা আইকনগুলির জন্য ভেক্টর অঙ্কনযোগ্য সুপারিশ করি। আইকন প্রদানকারীর প্রতিনিধিত্ব করে এবং প্রদানকারী চয়নকারীতে দেখানো হয়।

এখানে একটি উদাহরণ:

<service
    android:name=".provider.IncrementingNumberComplicationProviderService"
    android:icon="@drawable/icn_complications"
    android:label="@string/complications_provider_incrementing_number"
    android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
    <intent-filter>
        <action
         android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST"/>
    </intent-filter>
</service>

মেটা ডেটা উপাদান নির্দিষ্ট করুন

আপনার ম্যানিফেস্ট ফাইলে, সমর্থিত প্রকার, আপডেটের সময়কাল এবং কনফিগারেশন অ্যাকশন নির্দিষ্ট করতে মেটাডেটা অন্তর্ভুক্ত করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<meta-data
    android:name="android.support.wearable.complications.SUPPORTED_TYPES"
    android:value="RANGED_VALUE,SHORT_TEXT,LONG_TEXT" />

<meta-data
    android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
    android:value="300" />

যখন আপনার জটিলতা ডেটা প্রদানকারী সক্রিয় থাকে, UPDATE_PERIOD_SECONDS নির্দিষ্ট করে যে আপনি কত ঘন ঘন সিস্টেম ডেটার আপডেটগুলি পরীক্ষা করতে চান৷ যদি জটিলতায় দেখানো তথ্যের নিয়মিত সময়সূচীতে আপডেট করার প্রয়োজন না হয়, যেমন আপনি যখন পুশ আপডেট ব্যবহার করছেন, তাহলে এই মানটি 0 এ সেট করুন।

আপনি যদি UPDATE_PERIOD_SECONDS 0 এ সেট না করেন, তাহলে ডিভাইসের ব্যাটারি লাইফ সংরক্ষণ করতে আপনাকে অবশ্যই কমপক্ষে 300 (5 মিনিট) এর মান ব্যবহার করতে হবে, যা সিস্টেম প্রয়োগ করে সর্বনিম্ন আপডেট সময়কাল। এছাড়াও, মনে রাখবেন যে ডিভাইসটি যখন পরিবেষ্টিত মোডে থাকে বা পরিধান করা হয় না তখন আপডেটের অনুরোধ কম আসে।

আপডেট পাঠানোর বিষয়ে আরও বিস্তারিত জানার জন্য, Wear OS API রেফারেন্সে ComplicationProviderService ক্লাসের জন্য তালিকাভুক্ত কীগুলি দেখুন।

একটি কনফিগারেশন কার্যকলাপ যোগ করুন

প্রয়োজনে, একটি প্রদানকারী একটি কনফিগারেশন কার্যকলাপ অন্তর্ভুক্ত করতে পারে যা ব্যবহারকারীকে দেখানো হয় যখন ব্যবহারকারী একটি ডেটা প্রদানকারী বেছে নেয়। কনফিগারেশন কার্যকলাপ অন্তর্ভুক্ত করতে, নিম্নলিখিত কী সহ ম্যানিফেস্টে প্রদানকারী পরিষেবা ঘোষণায় একটি মেটাডেটা আইটেম অন্তর্ভুক্ত করুন:

<meta-data
    android:name="android.support.wearable.complications.PROVIDER_CONFIG_ACTION"
    android:value="PROVIDER_CONFIG_ACTION"/>

মান যে কোনো কর্ম হতে পারে.

তারপরে, সেই ক্রিয়াটির জন্য একটি অভিপ্রায় ফিল্টার সহ কনফিগারেশন কার্যকলাপ তৈরি করুন। কনফিগারেশন কার্যকলাপ প্রদানকারী হিসাবে একই প্যাকেজ থাকা আবশ্যক. প্রদানকারী সেট করা উচিত কিনা তা সিস্টেমকে জানাতে কনফিগারেশন কার্যকলাপ অবশ্যই RESULT_OK বা RESULT_CANCELED ফেরত দিতে হবে৷

প্রদানকারী-নির্দিষ্ট নিরাপদ ঘড়ির মুখ

প্রদানকারীরা তাদের ডেটা পাওয়ার জন্য নির্দিষ্ট ঘড়ির মুখগুলিকে "নিরাপদ" হিসাবে নির্দিষ্ট করতে পারে। এটি শুধুমাত্র তখনই ব্যবহৃত হয় যখন একটি ঘড়ির মুখ প্রদানকারীকে ডিফল্ট হিসেবে ব্যবহার করার চেষ্টা করে এবং প্রদানকারী ওয়াচ ফেস অ্যাপটিকে বিশ্বাস করে।

ঘড়ির মুখগুলিকে নিরাপদ হিসাবে ঘোষণা করতে, প্রদানকারী android.support.wearable.complications.SAFE_WATCH_FACES এর একটি কী সহ মেটাডেটা যোগ করে৷ মেটাডেটা মান হল WatchFaceService কম্পোনেন্ট নামের একটি কমা-বিভক্ত তালিকা, দেওয়া হয় যেন ComponentName.flattenToString() বলা হয়, অথবা অ্যাপ প্যাকেজের নাম, যে ক্ষেত্রে একটি নির্দিষ্ট অ্যাপের মধ্যে প্রতিটি ঘড়ির মুখ নিরাপদ বলে বিবেচিত হয়। মান তালিকার হোয়াইটস্পেস উপেক্ষা করা হয়। যেমন:

<meta-data
       android:name="android.support.wearable.complications.SAFE_WATCH_FACES"
       android:value="
          com.app.watchface/com.app.watchface.MyWatchFaceService,
          com.anotherapp.anotherwatchface/com.something.WatchFaceService,
          com.something.text"/>

বার্ন-ইন নিরাপদ ছবি প্রদান করুন

বার্ন-ইন করার জন্য সংবেদনশীল স্ক্রিনে, অ্যাম্বিয়েন্ট মোডে রঙের কঠিন ব্লকগুলি এড়ানো উচিত। যদি আপনার আইকন বা চিত্রগুলিতে রঙের শক্ত ব্লক অন্তর্ভুক্ত থাকে তবে একটি বার্ন-ইন নিরাপদ সংস্করণও সরবরাহ করুন।

আপনি ComplicationData.Builder#setIcon ব্যবহার করে একটি আইকন প্রদান করলে, ComplicationData.Builder#setBurnInProtectionIcon ব্যবহার করে একটি বার্ন-ইন নিরাপদ সংস্করণ অন্তর্ভুক্ত করুন।

যখন আপনি ComplicationData.Builder#setSmallImage ব্যবহার করে একটি ছবি প্রদান করেন, ComplicationData.Builder#setBurnInProtectionSmallImage ব্যবহার করে একটি বার্ন-ইন নিরাপদ সংস্করণ অন্তর্ভুক্ত করুন।

পুশ আপডেট ব্যবহার করুন

আপনার অ্যাপের ম্যানিফেস্টে একটি জটিলতার জন্য একটি ধ্রুবক, অশূন্য আপডেট ব্যবধান নির্দিষ্ট করার বিকল্প হিসাবে, আপনি গতিশীলভাবে আপডেটের অনুরোধ করতে ComplicationDataSourceUpdateRequester এর একটি উদাহরণ ব্যবহার করতে পারেন। জটিলতার ব্যবহারকারী-দৃশ্যমান সামগ্রীতে একটি আপডেটের অনুরোধ করতে, requestUpdate() কল করুন।

সতর্কতা: ডিভাইসের ব্যাটারি লাইফ সংরক্ষণ করতে, আপনার ComplicationDataSourceUpdateRequester এর উদাহরণ থেকে গড়ে প্রতি 5 মিনিটের বেশি বার requestUpdate() কল করবেন না।

গতিশীল মান প্রদান

Wear OS 4 থেকে শুরু করে, কিছু জটিলতা এমন মানগুলি প্রদর্শন করতে পারে যা প্ল্যাটফর্মে সরাসরি উপলব্ধ মানগুলির উপর ভিত্তি করে আরও ঘন ঘন রিফ্রেশ করে। আপনার জটিলতায় এই ক্ষমতা প্রদান করতে, ComplicationData ক্ষেত্রগুলি ব্যবহার করুন যা গতিশীল মানগুলি গ্রহণ করে। প্ল্যাটফর্মটি এই মানগুলিকে প্রায়শই মূল্যায়ন করে এবং আপডেট করে, জটিলতা প্রদানকারীকে চালু করার প্রয়োজন ছাড়াই।

উদাহরণ ক্ষেত্রগুলির মধ্যে রয়েছে GoalProgressComplicationData এর গতিশীল মান ক্ষেত্র এবং DynamicComplicationText , যেটি যেকোন ComplicationText ক্ষেত্রে ব্যবহার করা যেতে পারে। এই গতিশীল মানগুলি androidx.wear.protolayout.expression লাইব্রেরির উপর ভিত্তি করে।

নির্দিষ্ট পরিস্থিতিতে, প্ল্যাটফর্ম গতিশীল মানগুলি মূল্যায়ন করতে পারে না:

  • গতিশীল মান কখনও কখনও উপলব্ধ হয় না: এটি ঘটে, উদাহরণস্বরূপ, যখন ডিভাইসটি কব্জি বন্ধ থাকে৷ এই পরিস্থিতিতে, প্ল্যাটফর্মটি একটি NoDataComplicationData এর স্থানধারক ক্ষেত্রের পরিবর্তে গতিশীল মান অবৈধকরণ ফলব্যাক ক্ষেত্রের মান ব্যবহার করে।
  • ডায়নামিক মান কখনই পাওয়া যায় না: এটি এমন একটি ডিভাইসে ঘটে যা Wear OS 4 এর পুরানো রিলিজে চলছে। এই পরিস্থিতিতে, প্ল্যাটফর্মটি একটি সহচর ফলব্যাক ক্ষেত্র ব্যবহার করে, যেমন getFallbackValue ()

সময়-নির্ভর মান প্রদান করুন

কিছু জটিলতা বর্তমান সময়ের সাথে সম্পর্কিত একটি মান প্রদর্শন করতে হবে। উদাহরণগুলির মধ্যে বর্তমান তারিখ, পরবর্তী মিটিং পর্যন্ত সময় বা অন্য সময় অঞ্চলের সময় অন্তর্ভুক্ত রয়েছে।

সেই মানগুলি আপ টু ডেট রাখতে প্রতি সেকেন্ড বা মিনিটে একটি জটিলতা আপডেট করবেন না। পরিবর্তে, সময়-নির্ভর পাঠ্য ব্যবহার করে বর্তমান তারিখ বা সময়ের সাথে সম্পর্কিত মানগুলি নির্দিষ্ট করুন। এই সময়-নির্ভর মানগুলি তৈরি করতে আপনি ComplicationText ক্লাসে নির্মাতাদের ব্যবহার করতে পারেন।

জটিলতা আপডেট হার

আপনি দ্রুত হারে জটিলতা আপডেট করতে চাইতে পারেন। যাইহোক, এটি ডিভাইসের ব্যাটারি লাইফকে প্রভাবিত করতে পারে। আপনি একটি বিশেষায়িত জটিলতা অনুরোধ API ব্যবহার করতে বেছে নিতে পারেন যা নির্দিষ্ট জটিলতাগুলিকে আরও ঘন ঘন আপডেট করতে দেয়। যাইহোক, এই API ব্যবহার ঘড়ি প্রস্তুতকারকের দ্বারা অনুমোদিত হতে হবে। প্রতিটি ঘড়ি প্রস্তুতকারক সিদ্ধান্ত নেয় যে কোন জটিলতাগুলি সাধারণত অনুমোদিত হওয়ার চেয়ে দ্রুত হারে আপডেট হতে পারে।