Android Auto: My App doesn't play audio -


i'm implementing android auto support app, not working properly. i've followed google's documentation , tutorials, audio not working. controls, album art, artist name, etc., appear fine.

strange behaviour: after running spotify app through auto emulator , playing song, if go app , try play audio, works!

here's service class i've implemented:

/**  * created feliperrm on 8/13/2016.  */ @targetapi(build.version_codes.lollipop) public class automediabrowserservice extends mediabrowserservicecompat {      private static final string current_media_position = "media_position_key";     private static final int play = 1;     private static final int pause = 2;     private static final int buffering = 3;     private static final int connecting = 4;     private static final int stopped = 5;     mediaplayer mediaplayer;      private static final string my_media_root_id = "meuiddaraiz";     mediasessioncompat msession;      @override     public void oncreate() {         super.oncreate();         msession = new mediasessioncompat(this, "session tag");         setsessiontoken(msession.getsessiontoken());          // set callback object handle play control requests,         // implements mediasession.callback         msession.setcallback(new mediasessioncompat.callback() {             @override             public void onplay() {                 super.onplay();                 playmedia( preferencemanager.getdefaultsharedpreferences( getapplicationcontext() ).getint( current_media_position, 0 ), null );             }              //this called when pause button pressed, or when onplayfrommediaid called in             //order pause playing media             @override             public void onpause() {                 super.onpause();                setmediaplaybackstate(pause);                 pausemedia();             }              @override             public void onstop() {                 super.onstop();                 setmediaplaybackstate(stopped);                 if( mediaplayer != null ) {                     pausemedia();                     mediaplayer.release();                     preferencemanager.getdefaultsharedpreferences(automediabrowserservice.this).edit().putint( current_media_position,                             0 ).commit();                 }             }              @override             public void onplayfrommediaid(string mediaid, bundle extras) {                 super.onplayfrommediaid(mediaid, extras);                 msession.setmetadata(new mediametadatacompat.builder()                         .puttext(mediametadatacompat.metadata_key_title, "primeira musica")                         .puttext(mediametadatacompat.metadata_key_artist, "joãozinho das rezas")                         .puttext(mediametadatacompat.metadata_key_genre, "gospel")                         .puttext(mediametadatacompat.metadata_key_album_art_uri, "http://70.38.6.72/~vivafe/web/wp-content/uploads/2016/08/01.jpg")                         .build()                 );                 playmedia(0, mediaid);             }                @override             public void onplayfromsearch(string query, bundle extras) {                 super.onplayfromsearch(query, extras);             }          });          msession.setactive(true);     }      private void setmediaplaybackstate( int state ) {         playbackstatecompat playbackstate = null;         switch (state) {             case play:             playbackstate = new playbackstatecompat.builder()                     .setactions( playbackstatecompat.action_play_pause | playbackstatecompat.action_skip_to_next | playbackstatecompat.action_skip_to_previous )                     .setstate( playbackstatecompat.state_playing, 0, 1 )                     .build();                 break;              case pause:             playbackstate = new playbackstatecompat.builder()                     .setactions( playbackstatecompat.action_play_pause )                     .setstate(playbackstatecompat.state_paused, 0, 1)                     .build();                 break;              case buffering:                 playbackstate = new playbackstatecompat.builder()                         .setactions( playbackstatecompat.action_stop )                         .setstate(playbackstatecompat.state_buffering, 0, 1)                         .build();                 break;              case connecting:                 playbackstate = new playbackstatecompat.builder()                         .setactions( playbackstatecompat.action_stop )                         .setstate(playbackstatecompat.state_connecting, 0, 1)                         .build();                 break;              case stopped:                 playbackstate = new playbackstatecompat.builder()                         .setactions( playbackstatecompat.action_play_from_media_id )                         .setstate(playbackstatecompat.state_stopped, 0, 1)                         .build();                 break;         }         msession.setplaybackstate( playbackstate );     }      private void playmedia(final int position, string id ) {         setmediaplaybackstate(buffering);         if( mediaplayer != null )             try {                 mediaplayer.reset();             }             catch (exception e){                 mediaplayer = new mediaplayer();                 e.printstacktrace();             }         else             mediaplayer = new mediaplayer();         try {             mediaplayer.setaudiostreamtype(audiomanager.stream_music);             mediaplayer.setdatasource("http://70.38.6.72/~vivafe/web/wp-content/uploads/2016/08/mateus-01.mp3");             mediaplayer.prepareasync();         }         catch (exception e){             e.printstacktrace();         }         mediaplayer.setonpreparedlistener(new mediaplayer.onpreparedlistener() {             @override             public void onprepared(mediaplayer mediaplayer) {                 mediaplayer.start();                 if( position > 0 )                     mediaplayer.seekto( position );                 setmediaplaybackstate(play);             }         });          mediaplayer.setoninfolistener(new mediaplayer.oninfolistener() {             @override             public boolean oninfo(mediaplayer mediaplayer, int state, int extra) {                 switch (state){                     case mediaplayer.media_info_buffering_start:{                         log.d("mediaplayer","startbuffer");                         setmediaplaybackstate(buffering);                         break;                     }                      case mediaplayer.media_info_buffering_end:{                         log.d("mediaplayer","endbuffer");                         setmediaplaybackstate(play);                     }                 }                 return true;             }         });          mediaplayer.setonerrorlistener(new mediaplayer.onerrorlistener() {             @override             public boolean onerror(mediaplayer mediaplayer, int state, int extra) {                 log.e("mediaplayer error", string.valueof(state));                 return false;             }         });      }      private void pausemedia() {         if( mediaplayer != null ) {             mediaplayer.pause();             preferencemanager.getdefaultsharedpreferences( ).edit().putint( current_media_position,                     mediaplayer.getcurrentposition() ).commit();         }     }       @nullable     @override     public browserroot ongetroot(string s, int i, bundle bundle) {         return new browserroot(my_media_root_id, null);     }      @override     public void onloadchildren(@nonnull string parentid, @nonnull result<list<mediabrowsercompat.mediaitem>> result) {         list<mediabrowsercompat.mediaitem> mediaitems = new arraylist<>();         // check if root menu:          if (parentid.equals(my_media_root_id)) {             mediaitems.add(new mediabrowsercompat.mediaitem(new mediadescriptioncompat.builder().setmediaid("iddopastor").settitle("pastor").build(), mediabrowsercompat.mediaitem.flag_browsable));         } else if (parentid.equals("iddopastor")) {             mediaitems.add(new mediabrowsercompat.mediaitem(new mediadescriptioncompat.builder().setmediaid("iddopastor2").settitle("pastor 2").build(), mediabrowsercompat.mediaitem.flag_browsable));              // examine passed parentmediaid see submenu we're at,             // , put children of menu in mediaitems list         }         else if(parentid.equals("iddopastor2")){             mediaitems.add(new mediabrowsercompat.mediaitem(new mediadescriptioncompat.builder().setmediaid("genealogia")                     .settitle("tomé filho de josé")                     .setmediauri(uri.parse("http://70.38.6.72/~vivafe/web/wp-content/uploads/2016/08/mateus-01.mp3"))                     .seticonuri(uri.parse("http://70.38.6.72/~vivafe/web/wp-content/uploads/2016/08/01.jpg"))                     .build(), mediabrowsercompat.mediaitem.flag_playable));         }         result.sendresult(mediaitems);      }      @override     public void ondestroy() {         msession.release();         if( mediaplayer != null ) {             pausemedia();             mediaplayer.release();             preferencemanager.getdefaultsharedpreferences( ).edit().putint( current_media_position,                     0 ).commit();         }         super.ondestroy();     } } 

sorry long code, erro might anywhere on class!

i've put on androidmanifest.xml:

<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/ic_notification" />  <service android:name=".auto.automediabrowserservice"         android:exported="true">         <intent-filter>             <action android:name=                 "android.media.browse.mediabrowserservice"/>         </intent-filter>     </service> 

and have on res\xml\automotive_app_desc.xml:

<automotiveapp> <uses name="media" /> </automotiveapp> 


Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -