【发布时间】:2014-07-12 08:43:30
【问题描述】:
我用一个小按钮创建了 android wear 活动(我的移动应用程序中的活动快捷方式)。是否可以向我的主应用发送捆绑请求?
如果是的话如何实现点击监听?
谢谢!
【问题讨论】:
我用一个小按钮创建了 android wear 活动(我的移动应用程序中的活动快捷方式)。是否可以向我的主应用发送捆绑请求?
如果是的话如何实现点击监听?
谢谢!
【问题讨论】:
这可以使用提到的 MessageApi 来完成:http://developer.android.com/training/wearables/data-layer/messages.html
您需要初始化并连接 GoogleApiClient。单击按钮后,您必须获取节点列表并向它们发送消息。最后一步是从应用程序的电话部分读取此消息,这可以通过注册适当的 WearableListenerService 来完成。请参阅下面的示例代码。
应用的可穿戴部分:
请在应用的可穿戴部分定义此类活动:
public class WearableButtonActivity extends Activity {
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wearable_button_activity);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.build();
mGoogleApiClient.connect();
}
public void onButtonClicked(View target) {
if (mGoogleApiClient == null)
return;
final PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient);
nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
@Override
public void onResult(NodeApi.GetConnectedNodesResult result) {
final List<Node> nodes = result.getNodes();
if (nodes != null) {
for (int i=0; i<nodes.size(); i++) {
final Node node = nodes.get(i);
// You can just send a message
Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "/MESSAGE", null);
// or you may want to also check check for a result:
// final PendingResult<SendMessageResult> pendingSendMessageResult = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "/MESSAGE", null);
// pendingSendMessageResult.setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
// public void onResult(SendMessageResult sendMessageResult) {
// if (sendMessageResult.getStatus().getStatusCode()==WearableStatusCodes.SUCCESS) {
// // do something is successed
// }
// }
// });
}
}
}
});
}
}
然后攻击你的 res/layout/wearable_button_activity.xml 文件中的按钮的 onButtonClick 方法:
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:layout_gravity="center"
android:onClick="onButtonClicked" />
或者如果你喜欢这种方式,只需从代码中设置 OnClickListener:
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onButtonClicked(v);
}
});
应用的电话部分:
然后在您手机的清单上声明 DataLayerListenerService:
<service android:name=".DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
DataLayerListenerService 类:
public class DataLayerListenerService extends WearableListenerService {
@Override
public void onMessageReceived(MessageEvent messageEvent) {
super.onMessageReceived(messageEvent);
if("/MESSAGE".equals(messageEvent.getPath())) {
// launch some Activity or do anything you like
}
}
}
重要提示:您的应用程序的两个部分需要具有相同的包名称才能相互联系。
【讨论】: