【问题标题】:Android: Wearable not receiving Message Api messageAndroid:可穿戴设备未收到 Message Api 消息
【发布时间】:2017-07-18 22:15:24
【问题描述】:

我正在尝试从 Android 手机向可穿戴设备发送消息,但 WearableListenerService 中的 onMessageReceived 方法从未被调用。我已验证来自手机的消息已成功发送并发送到正确的节点,因此问题似乎出在可穿戴应用程序的接收端。这是我在可穿戴项目中监听器类的代码:

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 是一个嵌套类。 一切都正确编译,但从未收到消息。提前谢谢!

【问题讨论】:

    标签: java android wear-os android-wear-data-api


    【解决方案1】:

    在应用程序和您的设备中检查 GoogleServicesAPI 的版本。它们必须相同。

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

    PS 不要使用onPeerConnectedonConnectionSuspended。这些方法已被弃用并且不会被触发。

    【讨论】:

    • 谢谢,@Vyacheslav,我查过了,版本是一样的。我修改了代码以不包括 onPeerConnected 和 onConnectionSuspended 但它仍然没有收到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多