2014-09-16 2 views
5

В настоящее время приложения, такие как Google Hangouts и Facebook Messenger, могут принимать голосовые данные от Android Wearables, переводить их в текст и отправлять ответные сообщения пользователям. Я следовал учебник по https://developer.android.com/training/wearables/notifications/voice-input.html и когда я называю методом, описанным здесь:Получить голосовой ввод от Android Wearable

private CharSequence getMessageText(Intent intent) { 
    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); 
     if (remoteInput != null) { 
      return remoteInput.getCharSequence(EXTRA_VOICE_REPLY); 
     } 
    } 
    return null; 
} 

Я получаю сообщение об ошибке с линии RemoteInput.getResultsFromIntent (намерения) о том, что мой уровень API является слишком низким. В настоящее время я использую Samsung Galaxy S3, 4.4.2 API 19. Очевидно, что этот метод недоступен для меня, поэтому мой вопрос в том, как приложения, такие как Hangouts и Facebook Messenger, принимают ввод голоса и получают этот ввод на моем устройстве?

ответ

0

разработчиков. Андроид утверждает, что RemoteInput.getResultsFromIntent (намерение); это conveince так, что нам не нужно разбирать ClipData, так что я сделал некоторые исследования и discorvered, что именно нужно разобрать этот ClipData и это, как я решить мою проблему:

private void getMessageText(Intent intent){ 

    ClipData extra = intent.getClipData(); 

    Log.d("TAG", "" + extra.getItemCount()); //Found that I only have 1 extra 
    ClipData.Item item = extra.getItemAt(0); //Retreived that extra as a ClipData.Item 

    //ClipData.Item can be one of the 3 below types, debugging revealed 
     //The RemoteInput is of type Intent 

    Log.d("TEXT", "" + item.getText()); 
    Log.d("URI", "" + item.getUri()); 
    Log.d("INTENT", "" + item.getIntent()); 

    //I edited this step multiple times until I discovered that the 
    //ClipData.Item intent contained extras, or rather 1 extra, which was another bundle 
    //The key for that bundle was "android.remoteinput.resultsData" 
    //and the key to get the voice input from wearable notification was EXTRA_VOICE_REPLY which 
    //was set in my previous activity that generated the Notification. 

    Bundle extras = item.getIntent().getExtras(); 
    Bundle bundle = extras.getBundle("android.remoteinput.resultsData"); 

    for (String key : bundle.keySet()) { 
     Object value = bundle.get(key); 
     Log.d("TAG", String.format("%s %s (%s)", key, 
       value.toString(), value.getClass().getName())); 
    } 

    tvVoiceMessage.setText(bundle.get(EXTRA_VOICE_REPLY).toString()); 
} 

Этот ответ должен быть полезным для тех, кто заинтересован в разработке пригодного для носки приложения с использованием уведомлений и ответов на голосовые сообщения перед выпуском Android-L.

Смежные вопросы