[英]Message from Wearable to Phone
我正在制作一個要佩戴的應用程序,只需將消息發送到手機以顯示Toast,現在一切正常,但是我有一個問題,它僅在用戶與可穿戴設備互動時發送消息,並且我希望我的應用程序自動發送消息。
問題是,如果我在onCreate方法中調用方法sendToast(),則方法sendToast()內的布爾變量nodeId為null,但是如果在創建完所有按鈕后單擊按鈕,它將可以正常工作。
我懷疑如果直接調用sendToast,則線程尚未完成,並且恰好在那一刻我沒有該節點,但我不知道如何解決該問題。
我還嘗試了一些類似的技巧,但到目前為止都失敗了:
在方法setupWidgets()中調用方法sendToast()。
模擬單擊以創建按鈕實例並使用.callOnClick()或performClick()方法,但是由於我使用的是WatchViewStub(用於圓形和方形可穿戴設備),我無法訪問它,它給了我NullPointerException
在調用方法以延遲執行之前,先調用計時器。
到目前為止沒有任何效果,有人可以幫助我嗎?
非常感謝!!
這是我的代碼:
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
initApi();
final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
setupWidgets();
}
});
}
private void initApi() {
client = getGoogleApiClient(this);
retrieveDeviceNode();
}
private void setupWidgets() {
clickButton = (Button) findViewById(R.id.btn_toast);
clickButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sendToast();
}
});
}
private GoogleApiClient getGoogleApiClient(Context context) {
return new GoogleApiClient.Builder(context)
.addApi(Wearable.API)
.build();
}
private void retrieveDeviceNode() {
new Thread(new Runnable() {
@Override
public void run() {
client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
NodeApi.GetConnectedNodesResult result =
Wearable.NodeApi.getConnectedNodes(client).await();
List<Node> nodes = result.getNodes();
if (nodes.size() > 0) {
nodeId = nodes.get(0).getId();
}
client.disconnect();
}
}).start();
}
private void sendToast() {
if (nodeId != null) {
new Thread(new Runnable() {
@Override
public void run() {
client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
Wearable.MessageApi.sendMessage(client, nodeId, GET_CONTACTS, null);
client.disconnect();
}
}).start();
}
}
}
如果要從onCreate發送消息,則實際上是要這樣做(這不是一個編譯示例,但應該可以給您一個提示):
NodeApi.getConnectedNodes(client).setResultCallback(new ResultCallback<..>(List<Node> nodes) {
String nodeId = nodes.get(0).getId();
Wearable.MessageApi.sendMessage(client, nodeId, GET_CONTACTS, null);
}, TIMEOUT);
因此,基本上不必等待單獨的線程,而應添加回調並在返回時發送消息。 這樣,您應該能夠立即直接從onCreate
安排消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.