从可穿戴设备向手机发送消息:onMessageRecieved未调用

问题描述 投票:0回答:1

所以我有一个连接的Wear Emulator和一个Android手机进行测试。从手机向可穿戴设备发送数据映射效果很好。

现在,我想从可穿戴设备向手机发送消息。我已经尝试过AsyncTask,没有它。在两种情况下都可以成功发送消息,但是消息永远不会到达我的手机。

我的应用程序ID相同。

这是我的代码:

// Wear

    //Try with Async
inner class requestTokenTask : AsyncTask<Void?, Void?, Void?>() {
            override fun doInBackground(vararg params: Void?): Void? {
                    Wearable.getMessageClient(this).sendMessage(_connectedNode.toString(), "/requesttoken", null)
                return null
            }

        override fun onPostExecute(aVoid: Void?) {
            super.onPostExecute(aVoid)
            Log.d(TAG, "Message sent: $aVoid")
        }

    }

    //Try without async
    fun requestToken() {
        if(_connectedNode?.id != null){
            val sendTask: Task<*> = Wearable.getMessageClient(this).sendMessage(
                    _connectedNode!!.id!!,
                    "/requesttoken",
                    null
            ).apply {
                addOnSuccessListener {
                    Log.d(TAG, "Message sent: $it")
                }
                addOnFailureListener {
                    Log.d(TAG, "Message NOT sent, error: $it")
                }
            }
        }

}

手持代码:

    public override fun onResume() {
        super.onResume()
        Wearable.getDataClient(this).addListener(this)
        Wearable.getMessageClient(this).addListener(this)
        Wearable.getCapabilityClient(this)
                .addListener(this, Uri.parse("wear://"), CapabilityClient.FILTER_REACHABLE)

    }

override fun onMessageReceived(messageEvent: MessageEvent) {
    Log.d(TAG, "onMessageReceived()")
    //Receive the message from wear
   if (messageEvent.path.equals("/requesttoken")) {
  //Do stuff
    }
}

清单部分:

<activity
            android:name=".wear.WearableActivity"
            android:theme="@style/Theme.Transparent">
            <intent-filter>
                <action
                    android:name="com.google.android.gms.wearable.BIND_LISTENER"/>
                <!-- listeners receive events that match the action and data filters -->
                <action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
                <data android:scheme="wear" android:host="*" android:pathPrefix="/token"/>
            </intent-filter>

        </activity>

更新:刚刚发现不推荐使用“ BIND_LISTENER”,请尝试再次删除它并添加“ MESSAGE_RECIEVED”,但仍然无法正常工作。

android kotlin wear-os
1个回答
0
投票

我尝试了使用this tutorial的广播接收器的另一种方式,现在通信可以同时以两种方式进行

© www.soinside.com 2019 - 2024. All rights reserved.