onMessageReceived() never called, although connect

2019-07-20 17:15发布

I want to send Messages from a handheld device to a smartwatch (Moto360) only when a message comes up.

I made sure that both modules have the same package name, debug.key and version number.

The listener gets added in onConnected() and the function is always called.

Here is my Handheld gradle.build:

apply plugin: 'com.android.application'

android {
compileSdkVersion 19
buildToolsVersion "22.0.0"

defaultConfig {
    applicationId "de.bachelorthesis.important"
    minSdkVersion 9
    targetSdkVersion 19
    versionCode 1
    versionName "1.0"
}

signingConfigs {
    debug {
        storeFile file("../debug.keystore")
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
  }
}

dependencies {
compile 'com.android.support:support-v4:19.1.0'
compile 'com.google.android.gms:play-services:7.0.0'
compile files('libs/commons-io-2.4.jar')
compile files('libs/mapquest-android-sdk-1.0.5.jar')
compile files('libs/osmdroid-android-4.2.jar')
compile files('libs/slf4j-android-1.7.7.jar')
wearApp project(':wear')

}

In my handheld Activity the message should be sent like this:

 private void sendToSmartwatch(msg) {
    final String msg_arg = msg;

    new Thread(new Runnable() {
        public void run() {

            mGoogleApiClient = new GoogleApiClient.Builder(getBaseContext())
                    .addApi(Wearable.API)
                    .build();

            ConnectionResult connectionResult =
                    mGoogleApiClient.blockingConnect(5, TimeUnit.SECONDS);

            NodeApi.GetLocalNodeResult nodes =
                    Wearable.NodeApi.getLocalNode(mGoogleApiClient).await(3, TimeUnit.SECONDS);


            com.google.android.gms.wearable.Node node = nodes.getNode();

            MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(
                    mGoogleApiClient, node.getId(), CONSTANT, msg_arg.getBytes()).await();
            Log.d("node:result: ", "" + result.getStatus());


            if (result.getStatus().isSuccess()) {
                // Log success
            }
            else {
                // Log an error
            }

            mGoogleApiClient.disconnect();
        }
    }).start();
}

The Wearable gradle.build file looks like this:

apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "22.0.0"

defaultConfig {
    applicationId "de.bachelorthesis.important"
    minSdkVersion 20
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}

signingConfigs {
    debug {
        storeFile file("../debug.keystore")
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.android.support:wearable:1.1.0'
compile 'com.google.android.gms:play-services-wearable:+'
compile 'com.google.android.gms:play-services:+'
compile 'com.android.support:support-v4:22.0.0'
}

And eventually, the message should come up here on my watch:

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

...

onCreate(){

mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext())
            .addApi(Wearable.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    mGoogleApiClient.connect();
}

mListener = new MessageApi.MessageListener() {
        @Override
        public void onMessageReceived(MessageEvent messageEvent) {
            if (messageEvent.getPath().equals(CONSTANT)) {
                //do stuff with the message
            }
         }
    };

}


@Override
public void onConnected(Bundle bundle) {
    Wearable.MessageApi.addListener(mGoogleApiClient, mListener);
}

I have tried several different Listeners like the ListenerService (also with the BIND_LISTENER in the manifest.xml)

Also I have tried the PhoneService Class from this answer.

Any suggestions what I am doing wrong?

EDIT: I forgot to mention that the message gets sent from the handheld successfully, but it is not received.

EDIT 2: Could it be an issue, that my handheld module has the name "app" instead of "mobile"?! Also it is a project that i migrated from eclipse, to add the wearable feature.

1条回答
何必那么认真
2楼-- · 2019-07-20 18:01

So, i figured it out myself:

This project was helping.

I think the Constants made the difference. It was no path, but a randomly set constant by me. Still not sure, tho.

查看更多
登录 后发表回答