2015-07-17 4 views
2

Я довольно новичок в Android, но у меня есть знания в области разработки и языка Java. Я унаследовал приложение, которое должно включать в себя теперь совместимый с Android сопутствующий компаньон. Мне удалось запустить простое приложение, отправить сообщение туда и обратно с помощью приложения для телефона.Android Wear audio

Проблема, с которой я сейчас сталкиваюсь, заключается в том, как передать аудио с переносимого микрофона обратно в приложение, которое нужно обработать. Я могу сделать таймер на 4 секунды, чтобы создать буфер звука, который я нашел по другому вопросу здесь, но теперь я застрял, как передать эти данные в приложение, и как сообщить приложению обрабатывать эти данные и ничего больше.

Я искал MessageApi, но он слишком велик для отправки. Я думал, может быть, ChannelApi, но я не смог найти какую-либо информацию о том, как его использовать.

Любые предложения будут полезны.

ответ

4

Использование 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 
            } 
           } 
          }); 
       } 
      } 
     }); 

Тогда у вас есть OutputStream написать на на вашем wearble стороны. Со стороны телефона вы слушаете открытие канала, добавляя слушателя ChannelApi.ChannelListener() через Wearable.ChannelApi.addListener. Этот интерфейс имеет несколько обратных вызовов для использования; метод onChannelOpened(Channel channel) информирует Вас о том, что канал открыт и передает вам объект канала, из которого вы можете получить InputStream

channel.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 для идентификации узла, который способен обрабатывать ваш аудиофайл, т. Е. Ваш телефон. Другими словами, ваше приложение на стороне телефона регистрирует себя как способное обрабатывать ваш аудиопоток, а затем ваши загружаемые приложения ищут среди подключенных узлов для тех, кто предоставляет эту возможность, для таргетинга на канал, который он открывает.

+0

Спасибо, Али, это именно то, что я искал. –

+0

Ali еще один вопрос для вас, как добавить аудио с микрофона на канал? У меня есть код, который создает буфер, byte [] buffer = new byte [minBufSize]; recorder = новый AudioRecord (MediaRecorder.AudioSource.MIC, sampleRate, channelConfig, audioFormat, 1024); recorder.startRecording(); while (status == true) { minBufSize = recorder.read (buffer, 0, buffer.length); } Правильно ли это можно прочитать с микрофона и как добавить этот буфер в канал? –

+2

Один из способов - создать поток, который записывает в временный буфер на ваши часы из микрофона и другой поток, который считывает этот буфер и отправляет его на телефон с помощью ChannelApis. Если вам не нужно, чтобы этот процесс был близок к реальному времени, вы можете записать образец аудио в временный файл, а затем отправить этот файл на свое мобильное устройство. –