我对android还不太熟悉,但我对开发和java语言有一定的了解。
我继承了一个应用程序,需要包括现在的android可穿戴伴侣。
我已经设法使简单的应用程序被启动,与手机应用程序来回发送消息。
我现在面临的问题是如何将音频从可穿戴麦克风传回要处理的应用程序。我设法制作了一个4秒的计时器来创建音频缓冲区,这是我在这里的另一个问题上发现的,但现在我被困在如何将这些数据传递回应用程序,以及如何告诉应用程序处理这些数据和其他任何东西。
我正在查看MessageAPI,但它太大了,无法发送。
我在想channelapi,但是我还没有找到任何使用它的信息。
任何建议都会有帮助的。
最佳答案
使用channelapi是正确的解决方案。您需要打开一个从可穿戴应用程序到手机应用程序的频道,其代码类似于:
Wearable.ChannelApi.openChannel(
mGoogleApiClient, node.getId(), "/mypath").setResultCallback(
new ResultCallback<ChannelApi.OpenChannelResult>() {
@Override
public void onResult(ChannelApi.OpenChannelResult openChannelResult) {
if (openChannelResult.getStatus().isSuccess()) {
mChannel = openChannelResult.getChannel();
mChannel.getOutputStream(mGoogleApiClient).setResultCallback(
new ResultCallback<Channel.GetOutputStreamResult>() {
@Override
public void onResult(Channel.GetOutputStreamResult getOutputStreamResult) {
if (getOutputStreamResult.getStatus().isSuccess()) {
mOutputStream = getOutputStreamResult.getOutputStream();
} else {
// handle failure, and close channel
}
}
});
}
}
});
然后你有一个输出流写在你的可穿戴侧。在电话端,您可以通过添加一个
ChannelApi.ChannelListener()
监听器到Wearable.ChannelApi.addListener
来收听频道打开。该接口有许多回调供您使用;onChannelOpened(Channel channel)
方法通知您通道已打开并向您传递一个通道对象,您可以从中获取inputstreamchannel.getInputStream(mGoogleApiClient).setResultCallback(
new ResultCallback<Channel.GetInputStreamResult>() {
@Override
public void onResult(Channel.GetInputStreamResult getInputStreamResult) {
if (getInputStreamResult.getStatus().isSuccess()) {
InputStream is = getInputStreamResult.getInputStream();
} else {
// handle errors
}
}
});
在这个监听器中还有很多其他方法可以在通道关闭时通知您,等等(参见javadocs)。现在,您的可穿戴应用程序可以写入该频道,手机应用程序将在该频道的另一端接收字节。
注意。由于多个“节点”可能相互连接,因此最好使用CapabilityApis来标识能够处理音频文件(即手机)的节点。换言之,手机端的应用程序会将自身注册为能够处理音频流,然后可穿戴应用程序会在连接的节点中搜索提供该功能的节点,以查找其正在打开的频道。