アンドロイド携帯端末からウェアラブルにメッセージを送信しようとしていますが、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が入れ子になったクラスです。 すべてが正しくコンパイルされますが、メッセージは受信されません。前もって感謝します!
ありがとうございます、@Vyacheslav、私は確認し、バージョンは同じです。 onPeerConnectedとonConnectionSuspendedを含まないようにコードを修正しましたが、まだ受信していません。 –