【问题标题】:Button click in android wear [closed]android wear中的按钮单击[关闭]
【发布时间】:2014-07-12 08:43:30
【问题描述】:

我用一个小按钮创建了 android wear 活动(我的移动应用程序中的活动快捷方式)。是否可以向我的主应用发送捆绑请求?

如果是的话如何实现点击监听?

谢谢!

【问题讨论】:

标签: android wear-os


【解决方案1】:

这可以使用提到的 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
        }
    }
}



重要提示:您的应用程序的两个部分需要具有相同的包名称才能相互联系。

【讨论】:

  • 你需要在xml布局文件中指定android:onClick值 或者你可以从代码中设置OnClickListener。
  • 答案已编辑以涵盖此部分。
  • 其实我想通了。感谢您的快速回复。你能告诉我当设备没有连接到手机时会发生什么吗?在 for 循环之后,模拟器仍然会发送一条日志消息。根据电源线,它不应该做任何事情吗?
  • 如果手机未连接,消息将被忽略。如果您希望在连接后将某些内容保存并传送到 Android Wear,您应该使用 DataApi 而不是 MessageApi,但在这种情况下,我看不到有人想要保存此类结果以供以后使用并启动的用例活动一旦手表将再次连接到电话......如果您想检查发送消息的结果,您可以使用“PendingResult”执行类似的机制,就像在获取节点时所做的那样。然后在回调中你可以检查结果。
  • 我需要messageAPI..但是一旦我按下按钮,我就会完成并祝酒。在这种情况下。即使设备未连接,我也会敬酒。我该如何处理那部分?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
相关资源
最近更新 更多