2016-12-07 73 views
0

我正在使用索尼smartwatch 3,它有一个电源按钮,我想控制或说操纵。 我已经尝试使用:如何检测Android可穿戴物理键的点击?

onKeyDown() 
onKeyUp() 
onKeyLongPress() 

,但没有成功,它甚至不检测键的按压。

我也尝试过使用dispatchkeyevent(keyevent event)shouldOverrideKeyEvent(keyevent event)但是再次没有成功。 请指导。

回答

0

您需要初始化并连接GoogleApiClient。一旦你点击了按钮,你必须得到节点列表并发送一个message给他们。最后一步是阅读应用程序的手机部分的这条消息,这可以通过注册适当的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 
         //   } 
         //  } 
         // }); 
        } 
       } 
      } 
     }); 
    } 
} 

监听器:

findViewById(R.id.button).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onButtonClicked(v); 
     } 
    }); 

手机应用:

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 
     } 
    } 
} 
+0

我的问题是如何检测按o f物理密钥,即硬件密钥,如电源按钮,不是你告诉的XML按钮。所以我不能接受这个答案。如果你对硬件密钥有任何建议,请指导我@d.datul1990 –