मैं अपने हाथ और पहनने योग्य ऐप के बीच संवाद करने का प्रयास कर रहा हूं और मैं CapabilityApi का उपयोग करके सही Node खोजने की कोशिश कर रहा हूं। मुझे पता है कि डिवाइस जुड़े हुए हैं - अन्य एप्लिकेशन और नमूने ठीक काम करते हैं - लेकिन जब मैं अपना पहनने योग्य ऐप चलाता हूं तो न ही getCapability() या getAllCapabilities() किसी भी Nodes को बिल्कुल भी कॉल करें।

बाकी सब कुछ ठीक से काम करने लगता है - वास्तव में मैं हैंडहेल्ड डिवाइस को ठीक पा सकता हूं यदि मैं NodeApi का उपयोग करता हूं और MessageApi के साथ संदेश भेजना भी ठीक से काम करने लगता है - लेकिन प्रत्येक डिवाइस की क्षमताएं बस हैं किसी कारणवश विज्ञापन नहीं दिया गया। मैंने Res / मान फ़ोल्डर में Wear.xml को ठीक से सेटअप किया है और मैंने यह सुनिश्चित किया है कि दोनों ऐप्स में build.gradle में एक ही एप्लिकेशनआईडी सेट है।

मेरे पहनने योग्य ऐप में CapabilityApi कॉल इस तरह दिखते हैं:

Wearable.CapabilityApi.getCapability(mGoogleApiClient, SOME_CAPABILITY, CapabilityApi.FILTER_REACHABLE)
        .setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
            @Override
            public void onResult(CapabilityApi.GetCapabilityResult result) {
                if (!result.getStatus().isSuccess()) {
                    return;
                }

                final CapabilityInfo info = result.getCapability();
                updateCapabilities(info);
            }
        });

लेकिन CapabilityInfo Set<Node> उदाहरण हमेशा खाली रहता है! Wearable.CapabilityApi.getAllCapabilities() का उपयोग करने पर भी हमेशा एक खाली List<Node> लौटता है!

और रिकॉर्ड के लिए मेरे हाथ में पहनने वाले ऐप का x.ml इस तरह दिखता है:

<resources>
    <string-array name="android_wear_capabilities">
        <item>some_capability</item>
    </string-array>
</resources>

मैंने अपने कोडबेस के माध्यम से एक त्रुटि की तलाश में कंघी की है, लेकिन मुझे अभी नहीं मिल रहा है। इसका कोई मतलब नहीं है कि क्षमताओं का विज्ञापन क्यों नहीं किया जाता है।

3
Xaver Kapeller 17 नवम्बर 2015, 14:22

2 जवाब

सबसे बढ़िया उत्तर

संक्षिप्त जवाब:

हैंडहेल्ड और पहनने योग्य ऐप दोनों के लिए एक ही डिबग प्रमाणपत्र का उपयोग करें, अन्यथा CapabilityApi काम नहीं करेगा।


लंबा जवाब:

त्रुटि बहुत आसान हो गई! इसे ठीक करने में सिर्फ build.gradle में साइनिंग कॉनफिग को एडिट करना शामिल है।

मैं अपने हैंडहेल्ड ऐप के डिबग बिल्ड पर हस्ताक्षर करने के लिए एक सामान्य डिबग प्रमाणपत्र का उपयोग कर रहा था:

signingConfigs {
    debug {
        storeFile file("debug.jks")
        storePassword ...
        keyAlias ...
        keyPassword ...
    }
}

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        ...
    }
}

लेकिन मेरा पहनने योग्य ऐप उसी डिबग प्रमाण पत्र का उपयोग नहीं कर रहा था, यह स्पष्ट रूप से मेरी आईडीई द्वारा आपूर्ति की गई डिफॉल्ट डिबग प्रमाण पत्र का उपयोग कर रहा था। ऐसा लगता है कि जब हैंडहेल्ड और पहनने योग्य ऐप एक ही प्रमाण पत्र का उपयोग नहीं कर रहे हैं - तब भी जब यह सिर्फ डिबग बिल्ड है - तब एक डिवाइस की क्षमताओं को दूसरे द्वारा नहीं पाया जा सकता है। जो वास्तव में बहुत मायने रखता है, जो इस पूरी बात को भ्रमित करता है वह यह है कि बाकी सब कुछ ठीक काम करने लगता है और इस तरह की समस्या को हल करना मुश्किल है।

मेरे मामले में मैंने अपने डिबल्ड एप के बिल्ड.ग्रेडल और CapabilityApi कॉमन डिबग सिंगिंग कॉन्फिग को तुरंत हटा दिया। मुझे लगता है कि पहनने योग्य और हैंडहेल्ड ऐप के लिए एक ही डीबग साइनिंग कॉनफिग सेट करना भी समस्या को ठीक करेगा लेकिन मैंने अब तक इसका परीक्षण नहीं किया।

10
Xaver Kapeller 17 नवम्बर 2015, 11:22

अगर जांच:

  • दोनों मॉड्यूल के लिए build.gradle में ApplicationId समान है
  • दोनों मॉड्यूल का पैकेज नाम समान है
1
saj 28 मार्च 2016, 15:57