Android स्मार्टवॉच के डेटा को Android के विजेट से जोड़ें

डेटा उपलब्ध कराने वाले ऐप्लिकेशन, स्मार्टवॉच की होम स्क्रीन पर जानकारी दिखाते हैं Android घड़ी के विजेट, .

डेटा देने वाली कंपनी की सेवा काम की जानकारी देने के लिए ComplicationProviderService का इस्तेमाल करें जानकारी को सीधे स्मार्ट वॉच की होम स्क्रीन पर ले जाया जा सकता है.

डेटा उपलब्ध कराने वाली कंपनी का प्रोजेक्ट बनाना

बनाने के लिए प्रोजेक्ट में जोड़ने के लिए, इन चरणों को पूरा करें:

  1. फ़ाइल > नया > नया प्रोजेक्ट.
  2. प्रोजेक्ट टेंप्लेट विंडो में, Wear OS टैब पर क्लिक करें. इसके बाद, कोई गतिविधि नहीं और आगे बढ़ें पर क्लिक करें.
  3. Configure your Project विंडो में, अपने प्रोजेक्ट को नाम दें, प्रोजेक्ट की सामान्य जानकारी पर जाएं और पूरा करें पर क्लिक करें.
  4. Android Studio, डेटा उपलब्ध करवाने वाली कंपनी के लिए ऐप्लिकेशन मॉड्यूल की मदद से एक प्रोजेक्ट बनाता है. ज़्यादा के लिए Android Studio में प्रोजेक्ट के बारे में जानकारी, देखें प्रोजेक्ट बनाएं.
  5. डेटा उपलब्ध कराने वाली कंपनी का ऐप्लिकेशन शुरू करने के लिए, एक नई क्लास बनाएं BroadcastReceiver. उस क्लास का मकसद है कि Wear OS सिस्टम से, Android घड़ी के विजेट के अपडेट के अनुरोध. इसके अलावा, बढ़ाने वाली नई क्लास डेटा देने के लिए ComplicationProviderService समस्या को ठीक करने के लिए, ज़रूरी संकेतों पर टैप करें. ज़्यादा जानकारी के लिए, यहां देखें:

    ध्यान दें: डेटा उपलब्ध कराने वाली कंपनी के लिए कोई गतिविधि जोड़ना ज़रूरी नहीं. उदाहरण के लिए, हो सकता है कि आप कोई ऐसी गतिविधि चाहें जो सिर्फ़ तब लॉन्च हो, जब उपयोगकर्ता किसी Android घड़ी का विजेट.

अपडेट के अनुरोध करने का कोई तरीका लागू करें

Android स्मार्टवॉच के विजेट वाले डेटा की ज़रूरत पड़ने पर, Wear OS सिस्टम अपडेट के अनुरोध आपके डेटा को भेजता है कंपनी. ये अनुरोध आपके BroadcastReceiver. अपडेट के अनुरोधों का जवाब देने के लिए, डेटा उपलब्ध कराने वाली कंपनी को ComplicationProviderService में से onComplicationUpdate() तरीका क्लास.

Wear OS सिस्टम को आपके डिवाइस से डेटा की ज़रूरत पड़ने पर, वह onComplicationUpdate() को कॉल करता है प्रोवाइडर—उदाहरण के लिए, जब आपके प्रोवाइडर का इस्तेमाल करने वाली कोई जटिलता चालू हो या एक तय समय बीत चुका हो. यह ComplicationManager ऑब्जेक्ट, पैरामीटर के तौर पर onComplicationUpdate, जिसका इस्तेमाल करके, सिस्टम में डेटा को वापस भेजा जाता है.

ध्यान दें: जब डेटा उपलब्ध करवाने वाली कंपनी का ऐप्लिकेशन डेटा मुहैया कराता है, तो स्मार्टवॉच की होम स्क्रीन को आपकी भेजी गई रॉ वैल्यू मिलती है, ताकि यह जानकारी हासिल कर सके.

नीचे दिया गया कोड स्निपेट, onComplicationUpdate तरीका:

Kotlin

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)
    }
}

Java

@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);
   }
}

मेनिफ़ेस्ट किए गए एलान और अनुमतियां

डेटा उपलब्ध कराने वाले ऐप्लिकेशन को अपने ऐप्लिकेशन मेनिफ़ेस्ट में खास जानकारी को शामिल करना होगा, ताकि उसे . इस सेक्शन में, कन्वर्ज़न ट्रैकिंग के लिए ज़रूरी सेटिंग के बारे में बताया गया है ऐप्लिकेशन हैं.

अपने ऐप्लिकेशन के मेनिफ़ेस्ट में, सेवा के बारे में बताएं और अपडेट के अनुरोध पर कार्रवाई के इंटेंट वाला फ़िल्टर जोड़ें. मेनिफ़ेस्ट को BIND_COMPLICATION_PROVIDER जोड़कर भी सेवा की सुरक्षा करनी चाहिए को यह पक्का करने की अनुमति देनी होगी कि सिर्फ़ Wear OS सिस्टम, सेवा देने वाली कंपनी की सेवाओं से जुड़ सकता है.

साथ ही, इसमें एक android:icon एट्रिब्यूट शामिल करें service एलिमेंट जो एक ही रंग का सफ़ेद आइकॉन. हम आइकॉन के लिए वेक्टर ड्रॉ करने का सुझाव देते हैं. आइकॉन, सेवा देने वाली कंपनी के बारे में बताता है और सेवा देने वाली कंपनी में दिखता है चुनने का बटन.

यहां एक उदाहरण दिया गया है:

<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" />

अगर आपके Android घड़ी के विजेट का डेटा उपलब्ध कराने वाली कंपनी चालू है, तो UPDATE_PERIOD_SECONDS बताता है कि आपको कितनी बार सिस्टम का इस्तेमाल किया जा सकता है. अगर हर महीने Android घड़ी के विजेट को नियमित शेड्यूल पर अपडेट करने की ज़रूरत नहीं है. जैसे: अगर आप पुश अपडेट का इस्तेमाल कर रहे हैं, तो इस मान को 0.

अगर आप UPDATE_PERIOD_SECONDS को 0 पर सेट नहीं करते, तो आपको कम से कम 300 (5 मिनट) के मान का उपयोग करना होगा, जो कि कम से कम अपडेट की अवधि जिसे सिस्टम लागू करता है, ताकि डिवाइस की बैटरी लाइफ़. साथ ही, ध्यान रखें कि अपडेट के अनुरोध कम बार आता है जब डिवाइस ऐंबियंट मोड में होता है या पहना नहीं जाता है.

अपडेट भेजने के बारे में ज़्यादा जानकारी के लिए, ComplicationProviderService क्लास Wear OS एपीआई रेफ़रंस.

कोई कॉन्फ़िगरेशन गतिविधि जोड़ें

ज़रूरत पड़ने पर, सेवा देने वाली कंपनी ऐसी कॉन्फ़िगरेशन गतिविधि शामिल कर सकती है जो जब उपयोगकर्ता डेटा उपलब्ध करवाने वाली कंपनी चुनता है, तो उपयोगकर्ता को दिखाया जाता है. इसे शामिल करने के लिए कॉन्फ़िगरेशन गतिविधि, प्रोवाइडर सेवा में मेटाडेटा आइटम शामिल करें मेनिफ़ेस्ट में नीचे दी गई कुंजी के साथ एलान करें:

<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.

पुश अपडेट का इस्तेमाल करना

किसी स्थिर, गैर-शून्य के लिए एक Android घड़ी के विजेट के अलावा, किसी भी उदाहरण का इस्तेमाल करके, डाइनैमिक तौर पर अपडेट का अनुरोध करने के लिए, ComplicationDataSourceUpdateRequester. Android घड़ी के विजेट के कॉन्टेंट को अपडेट करने का अनुरोध करने के लिए, इस पर कॉल करें requestUpdate().

चेतावनी: डिवाइस की बैटरी लाइफ़ बनाए रखने के लिए, अपने इंस्टेंस से requestUpdate() को कॉल न करें इस दिन हर 5 मिनट की तुलना में ComplicationDataSourceUpdateRequester ज़्यादा औसत.

डाइनैमिक वैल्यू देना

Wear OS 4 से शुरू होने वाले कुछ Android घड़ी के विजेट, आपको बार-बार रीफ़्रेश होने वाली वैल्यू दिखा सकते हैं सीधे तौर पर प्लैटफ़ॉर्म पर उपलब्ध होने वाली वैल्यू के आधार पर. यह सुविधा उपलब्ध कराने के लिए Android घड़ी के विजेट का इस्तेमाल करें, स्वीकार किए जाने वाले ComplicationData फ़ील्ड डाइनैमिक वैल्यू. यह प्लैटफ़ॉर्म, इन बातों का आकलन करता है और इन वैल्यू को बार-बार अपडेट करती है. इसके लिए, Android घड़ी के विजेट की सुविधा देने वाली कंपनी को चलाने की ज़रूरत नहीं होती.

उदाहरण फ़ील्ड में शामिल हैं GoalProgressComplicationData की डाइनैमिक वैल्यू फ़ील्ड और DynamicComplicationText, जिसका इस्तेमाल किसी भी समय किया जा सकता है ComplicationText फ़ील्ड. ये डायनैमिक वैल्यू androidx.wear.protolayout.expression लाइब्रेरी.

कुछ मामलों में प्लैटफ़ॉर्म, डाइनैमिक वैल्यू का आकलन नहीं कर सकता:

समय के हिसाब से वैल्यू देना

कुछ विजेट के लिए, मौजूदा वैल्यू से जुड़ी वैल्यू दिखाना ज़रूरी है समय. उदाहरण के लिए, मौजूदा तारीख, अगली मीटिंग में लगने वाला समय, या किसी अन्य टाइम ज़ोन में समय.

Android घड़ी के विजेट को इतनी बार अपडेट न करें का समय हो सकता है. इसके बजाय, इसके बारे में बताएं समय पर निर्भर टेक्स्ट का इस्तेमाल करके, मौजूदा तारीख या समय के मुताबिक वैल्यू सबमिट करें. बिल्डर का इस्तेमाल ComplicationText क्लास का इस्तेमाल करें.

Android स्मार्टवॉच के विजेट अपडेट की दर

हो सकता है कि आप Android घड़ी के विजेट को तेज़ी से अपडेट करना चाहें. हालांकि, इससे बैटरी पर असर पड़ सकता है डिवाइस का जीवन. आप खास अधिकारों वाले लोगों के ऐक्सेस का इस्तेमाल कर सकते हैं Android घड़ी के विजेट का अनुरोध करने वाला एपीआई, इससे किसी Android घड़ी के विजेट को ज़्यादा बार अपडेट किया जा सकता है. हालांकि, इस एपीआई का इस्तेमाल सिर्फ़ अनुमति है स्मार्टवॉच बनाने वाली कंपनी. स्मार्टवॉच बनाने वाली हर कंपनी यह तय करती है कि स्मार्टवॉच के लिए कौन-कौनसे विजेट अपडेट किए जा सकते हैं सामान्य से ज़्यादा तेज़ दर.