मैं अपने हाथ और पहनने योग्य ऐप के बीच संवाद करने का प्रयास कर रहा हूं और मैं 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>
मैंने अपने कोडबेस के माध्यम से एक त्रुटि की तलाश में कंघी की है, लेकिन मुझे अभी नहीं मिल रहा है। इसका कोई मतलब नहीं है कि क्षमताओं का विज्ञापन क्यों नहीं किया जाता है।
2 जवाब
संक्षिप्त जवाब:
हैंडहेल्ड और पहनने योग्य ऐप दोनों के लिए एक ही डिबग प्रमाणपत्र का उपयोग करें, अन्यथा CapabilityApi
काम नहीं करेगा।
लंबा जवाब:
त्रुटि बहुत आसान हो गई! इसे ठीक करने में सिर्फ build.gradle में साइनिंग कॉनफिग को एडिट करना शामिल है।
मैं अपने हैंडहेल्ड ऐप के डिबग बिल्ड पर हस्ताक्षर करने के लिए एक सामान्य डिबग प्रमाणपत्र का उपयोग कर रहा था:
signingConfigs {
debug {
storeFile file("debug.jks")
storePassword ...
keyAlias ...
keyPassword ...
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
...
}
}
लेकिन मेरा पहनने योग्य ऐप उसी डिबग प्रमाण पत्र का उपयोग नहीं कर रहा था, यह स्पष्ट रूप से मेरी आईडीई द्वारा आपूर्ति की गई डिफॉल्ट डिबग प्रमाण पत्र का उपयोग कर रहा था। ऐसा लगता है कि जब हैंडहेल्ड और पहनने योग्य ऐप एक ही प्रमाण पत्र का उपयोग नहीं कर रहे हैं - तब भी जब यह सिर्फ डिबग बिल्ड है - तब एक डिवाइस की क्षमताओं को दूसरे द्वारा नहीं पाया जा सकता है। जो वास्तव में बहुत मायने रखता है, जो इस पूरी बात को भ्रमित करता है वह यह है कि बाकी सब कुछ ठीक काम करने लगता है और इस तरह की समस्या को हल करना मुश्किल है।
मेरे मामले में मैंने अपने डिबल्ड एप के बिल्ड.ग्रेडल और CapabilityApi
कॉमन डिबग सिंगिंग कॉन्फिग को तुरंत हटा दिया। मुझे लगता है कि पहनने योग्य और हैंडहेल्ड ऐप के लिए एक ही डीबग साइनिंग कॉनफिग सेट करना भी समस्या को ठीक करेगा लेकिन मैंने अब तक इसका परीक्षण नहीं किया।
अगर जांच:
- दोनों मॉड्यूल के लिए build.gradle में ApplicationId समान है
- दोनों मॉड्यूल का पैकेज नाम समान है
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।