Java Android Wear与可穿戴设备的通信不工作

Java Android Wear与可穿戴设备的通信不工作,java,android,wear-os,android-wear-data-api,Java,Android,Wear Os,Android Wear Data Api,我有一个智能手机应用程序正在运行。我现在想扩展它,这样也有一个可穿戴的部分。我试图从多个来源(和)收集所有信息,但我似乎无法将数据发送到我的可穿戴设备 我做错了什么 这是我到目前为止的代码 我在电话方面的基本活动: public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks @Override protected void onCreate(Bundle s

我有一个智能手机应用程序正在运行。我现在想扩展它,这样也有一个可穿戴的部分。我试图从多个来源(和)收集所有信息,但我似乎无法将数据发送到我的可穿戴设备

我做错了什么

这是我到目前为止的代码

我在电话方面的基本活动:

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Android wear support
    initGoogleApiClient();
}

// Android wear support
private void initGoogleApiClient() {
    mApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .build();
    mApiClient.isConnected());

    mApiClient.connect();
}

@Override
public void onConnected(Bundle bundle) {
    sendMessage(START_ACTIVITY, "Test 12345");
}

@Override
public void onConnectionSuspended(int i) {
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mApiClient.isConnected()) {
        mApiClient.disconnect();
    }
}

private void sendMessage(final String path, final String text) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mApiClient).await();
            for (Node node : nodes.getNodes()) {
                MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(
                        mApiClient, node.getId(), path, text.getBytes()).await();
            }
        }
    }).start();
}
}
在Android Studio内的可穿戴模块中,我有以下清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.appname.wear">

<uses-feature android:name="android.hardware.type.watch" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.DeviceDefault">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name="com.myapp.appname.wear.WearMessageListenerService">
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
        </intent-filter>
    </service>
</application>
这是我的wear应用程序中的MainActivity.java:

public class MainActivity extends Activity implements MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks {

private TextView mTextView;
private static final String WEAR_MESSAGE_PATH = "/start_activity";
GoogleApiClient mApiClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    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.textView);
        }
    });

    mApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(this)
            .build();

    mApiClient.connect();
}

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

@Override
public void onConnectionSuspended(int i) {
}

@Override
public void onMessageReceived( final MessageEvent messageEvent ) {
    runOnUiThread( new Runnable() {
        @Override
        public void run() {
            if( messageEvent.getPath().equalsIgnoreCase( WEAR_MESSAGE_PATH ) ) {
                mTextView.setText( new String( messageEvent.getData() ));
            }
        }
    });
}
}

此外,在我的智能手机应用程序构建配置中,我使用以下内容:

wearApp project(':mywearapp')

主应用程序和Wear应用程序的软件包名称需要与完全匹配:您的软件包名称似乎设置为
com.myapp.appname.Wear
(尽管您没有包含您的
build.gradle
,这可能会覆盖该名称)


另外,在构建
GoogleAppClient时,请确保您拨打电话,否则连接时它将不知道呼叫谁。

主应用程序和Wear应用程序的软件包名称需要精确匹配:您的软件包名称似乎设置为
com.myapp.appname.Wear
(尽管您没有包含您的
build.gradle
,这可能会覆盖它)


另外,在构建
GoogleAppClient时,请确保您拨打电话,否则连接时它将不知道呼叫谁。

主应用程序和Wear应用程序的软件包名称需要精确匹配:您的软件包名称似乎设置为
com.myapp.appname.Wear
(尽管您没有包含您的
build.gradle
,这可能会覆盖它)


另外,在构建
GoogleAppClient时,请确保您拨打电话,否则连接时它将不知道呼叫谁。

主应用程序和Wear应用程序的软件包名称需要精确匹配:您的软件包名称似乎设置为
com.myapp.appname.Wear
(尽管您没有包含您的
build.gradle
,这可能会覆盖它)


另外,请确保在构建
GoogleAppClient
时调用它,否则它不知道在连接时调用谁。

非常感谢!我这样做了,但似乎在移动端没有调用OnConnect()。您在哪里调用
InitGoogleAppClient()
?您还没有包含
onCreate()
或类似的方法不抱歉,我忘了在我的帖子中包含它,将立即更新。我正在从onCreate()调用它…这被调用,ApicClient也被实例化,但OnConnect()未被调用…啊,看起来您缺少对addConnectionCallbacks()的调用在你的
GoogleAppClient.Builder上
!就可以了。非常感谢!我这样做了,但似乎在移动端没有调用onConnected()。你在哪里调用
initGoogleAppClient()
?你还没有包括你的
onCreate()
或类似的方法不抱歉,我忘了在我的帖子中包含它,将立即更新。我正在从onCreate()调用它…这被调用,ApicClient也被实例化,但OnConnect()未被调用…啊,看起来您缺少对addConnectionCallbacks()的调用在你的
GoogleAppClient.Builder上
!就可以了。非常感谢!我这样做了,但似乎在移动端没有调用onConnected()。你在哪里调用
initGoogleAppClient()
?你还没有包括你的
onCreate()
或类似的方法不抱歉,我忘了在我的帖子中包含它,将立即更新。我正在从onCreate()调用它…这被调用,ApicClient也被实例化,但OnConnect()未被调用…啊,看起来您缺少对addConnectionCallbacks()的调用在你的
GoogleAppClient.Builder上
!就可以了。非常感谢!我这样做了,但似乎在移动端没有调用onConnected()。你在哪里调用
initGoogleAppClient()
?你还没有包括你的
onCreate()
或类似的方法不抱歉,我忘了在我的帖子中包含它,将立即更新。我正在从onCreate()调用它…这被调用,ApicClient也被实例化,但onConnected()没有被调用…啊,看起来你错过了对你的
GoogleAppClient.Builder上addConnectionCallbacks()的调用。
!这样就可以了。
wearApp project(':mywearapp')