Създадох нов проект за Android Studio за телефон с Android и Android Wear, за да тествам ChannelApi. Изглежда, че всичко работи добре в моя проект, с изключение на това, че вътре в метода onChannelOpened
не мога да чета от InputStream
без да замразя приложението.
Ето как изпращам съобщението от Wearable (което изглежда работи):
Wearable.ChannelApi.openChannel(googleApiClient, node.getId(), channelIdentifier).setResultCallback(new ResultCallback<ChannelApi.OpenChannelResult>() {
@Override
public void onResult(ChannelApi.OpenChannelResult openChannelResult) {
final Channel channel = openChannelResult.getChannel();
channel.getOutputStream(googleApiClient).setResultCallback(new ResultCallback<Channel.GetOutputStreamResult>() {
@Override
public void onResult(final Channel.GetOutputStreamResult getOutputStreamResult) {
final String message = "hello from your smartwatch";
try {
getOutputStreamResult.getOutputStream().write(message.getBytes());
Log.d(TAG, "sendMessageToNode: onResult: onResult: Message sent: " + message);
}
// ...
Дневникът отпечатва: D/MainActivity﹕ sendMessageToNode: onResult: onResult: Message sent: hello from your smartwatch
От страна на смартфона се опитвам да прочета съобщението, както следва:
@Override
public void onChannelOpened(final Channel channel) {
channel.getInputStream(googleApiClient).setResultCallback(new ResultCallback<Channel.GetInputStreamResult>() {
@Override
public void onResult(Channel.GetInputStreamResult getInputStreamResult) {
Log.d(TAG, "onChannelOpened: onResult");
String message = "";
InputStream inputStream = null;
BufferedReader bufferedReader = null;
try {
inputStream = getInputStreamResult.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
//while ((line = bufferedReader.readLine()) != null) {
while (true) {
// Next line is freezing the app
line = bufferedReader.readLine();
Log.d(TAG, "onChannelOpened: onResult: line: " + line);
message += line + "\n";
if (line == null) break;
}
Log.d(TAG, "onChannelOpened: onResult: Received the following message: \" + message");
// ...
Дневникът отпечатва: D/MainActivity﹕ onChannelOpened: onResult
но това е всичко.
Стартирах програмата за отстраняване на грешки и сега знам, че грешката трябва да е в този ред: line = bufferedReader.readLine();
. Но няма изключение или нещо друго. Дебъгерът дори ми показва, че буферът има правилните стойности:
Опитвам се да изпратя „здравей от твоя смарт часовник“. Приложението обаче изглежда замръзва. Някой знае ли защо?
AsyncTask
)? - person Kristian Vukusic   schedule 21.08.2015bufferedReader.readLine();
никога не връщаnull
. Освен товаinputStream.read()
method никога не връща-1
и не хвърля изключение. Това е някакво странно поведение, което не мога да обясня. - person jfmg   schedule 21.08.2015