2017-07-18 98 views
0

我想从android手机发送消息给可穿戴设备,但WearableListenerService中的onMessageReceived方法从不会被调用。我已验证手机发送的消息已成功发送到正确的节点,因此问题似乎出现在可穿戴应用程序的接收端。这里是我在可穿戴项目监听器类代码:Android:可佩戴不接收消息Api消息

public class MessageListener extends WearableListenerService implements GoogleApiClient.ConnectionCallbacks { 
@Override 
public void onMessageReceived(MessageEvent messageEvent) { 
    if (messageEvent.getPath().equals("/message_path")) { 
     final String message = new String(messageEvent.getData()); 

     // Broadcast message to wearable activity for display 
     Intent messageIntent = new Intent(); 
     messageIntent.setAction(Intent.ACTION_SEND); 
     messageIntent.putExtra("message", message); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent); 
    } 
    else { 
     super.onMessageReceived(messageEvent); 
    } 
} 

@Override 
public void onPeerConnected(Node peer) { 
    Log.v("myTag", "Peer connected: " + peer.getDisplayName()); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    Wearable.MessageApi.addListener(MainActivityWear.client, this); 
} 

@Override 
public void onConnectionSuspended(int i) {} 
} 

通过设置断点,我发现,无论是onMessageReceived方法也不onConnected方法调用。

下面是可穿戴的项目在MainActivity:

public class MainActivityWear extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

private TextView mTextView; 
private MessageReceiver messageReceiver; 
public static GoogleApiClient client; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_wear); 
    final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); 
    stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { 
     @Override 
     public void onLayoutInflated(WatchViewStub stub) { 
      mTextView = (TextView) stub.findViewById(R.id.text); 
     } 
    }); 
    client = new GoogleApiClient.Builder(this) 
      .addApi(Wearable.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 

    // Register the local broadcast receiver 
    IntentFilter messageFilter = new IntentFilter(Intent.ACTION_SEND); 
    messageReceiver = new MessageReceiver(); 
    LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, messageFilter); 
} 
// Connect to the data layer when the Activity starts 
@Override 
protected void onStart() { 
    super.onStart(); 
    client.connect(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    unregisterReceiver(messageReceiver); 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) {} 

@Override 
public void onConnectionSuspended(int i) {} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {} 


public class MessageReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String message = intent.getStringExtra("message"); 
     // Display message in UI 
     mTextView.setText(message); 
    } 
} 
} 

的的messageReceiver是嵌套类。 所有内容编译正确,但消息从未收到。先谢谢你!

回答

0

检查应用程序和设备中的GoogleServicesAPI版本。他们必须是一样的。

检查您的穿戴设备和手持设备是否与您的应用具有相同的版本。如果不是 - 使用最老的一个。

PS 不使用onPeerConnectedonConnectionSuspended。这些方法已被弃用,不会被解雇。

+0

谢谢,@Vyacheslav,我查了一下,版本也一样。我修改了代码,不包含onPeerConnected和onConnectionSuspended,但它仍然没有收到。 –