2015-08-11 2 views
3

У меня возникли проблемы с Play [song] в команде [app]; в частности, «приложение» не распознается Android Auto.Android Auto - Voice - Невозможно выполнить «Play [x] on [y]»

Я получаю сообщение об аудио речи обратно: «Не знаю, как помочь играть песни на приложение»

Так что распознавание речи работает отлично (как песни и приложения являются, как я говорил), но либо совпадение с приложением не работает или Auto не очевидно, что мое приложение может справиться с этим.

В симуляторе поиск работает из пункта меню «Поиск», поэтому я предполагаю, что фильтры моих намерений верны.

Мой Manifest имеет следующее:

<!-- - - - - - - - - - - - - - - - - - - - - --> 
    <!-- Auto --> 
    <!-- - - - - - - - - - - - - - - - - - - - - --> 
    <meta-data android:name="com.google.android.gms.car.application" android:resource="@xml/automotive_app_desc"/> 
    <meta-data android:name="com.google.android.gms.car.notification.SmallIcon" android:resource="@drawable/brand_icon_white" /> 
    <service android:name=".library.service.auto.MyMediaBrowserService" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.media.browse.MediaBrowserService"/> 
     </intent-filter> 
    </service> 

Я попытался положить следующее в моей декларации службы или деятельности, как не показано на YouTube DevByte, но ни, кажется, работает:

<action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> 
    <category android:name="android.intent.category.DEFAULT" /> 

I Would ожидайте, что он будет находиться в Сервисе, так как нет никаких действий, связанных с Сервисом. Я хотел бы точно знать, где это должно быть.

Я, вероятно, что-то пропустил или что-то неправильно понял. Одна из проблем может заключаться в том, что имя приложения содержит в нем число (например, 1up).

ответ

4

Просто объявите intent-filter за MEDIA_PLAY_FROM_SEARCH в декларации о деятельности. Для Android Auto не обязательно выполнять намерение, так как Android Auto вызовет MediaSession.Callback.onPlayFromSearch. Объявление в манифесте служит для обозначения вашего приложения как доступного для ответа на голосовые команды мультимедиа. Тем не менее, вы, возможно, захотите обработать его должным образом, потому что другие неавтоматические среды, такие как Google Now, будут отправлять голосовые запросы через это намерение.

Лучший способ справиться с намерением - позвонить по телефону MediaController.TransportControls.playFromSearch, чтобы вы обрабатывали его последовательно, независимо от того, как был запущен голосовой поиск.

Смотрите фрагмент из uAmp AndroidManifest.xml:

<!-- Main activity for music browsing on phone --> 
    <activity 
     android:name=".ui.MusicPlayerActivity" 
     android:label="@string/app_name"> 

     [...] 

     <!-- Use this intent filter to get voice searches, like "Play The Beatles" --> 
     <intent-filter> 
      <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

И this is how намерение обрабатываемое:

@Override 
protected void onMediaControllerConnected() { 
    if (mVoiceSearchParams != null) { 
     String query = mVoiceSearchParams.getString(SearchManager.QUERY); 
     getMediaController().getTransportControls().playFromSearch(query, mVoiceSearchParams); 
     mVoiceSearchParams = null; 
    } 
    getBrowseFragment().onConnected(); 
} 

Один нюанс: вам нужно опубликовать свое приложение с целью фильтра и ожидания несколько дней, чтобы получить его пометкой и индексированием для «Play [x] по адресу [y]» тип запроса. Это не мгновенно.

+0

Хорошая точка на оговорке! –