2016-12-07 33 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 –