2016-01-15 3 views
1

Я новичок в Android Auto и все еще пытаюсь понять это. Я успешно играл музыку из своего собственного программного приложения, но музыка выходила из моих динамиков смартфонов вместо автомобильных динамиков. Другие (примеры) приложения делают это правильно.Звуковые эффекты от Smarthpone Спикеры вместо Android Авто динамики

Какая часть медиасистемы несет ответственность за такое поведение? В документации на Android говорится, что звук отправляется на автомобильные динамики.

@Override 
    public void onPlayFromMediaId(String mediaId, Bundle extras) { 

     this.mPlayingQueue.add(item); 
     session.setActive(true); 
     session.setQueue(mPlayingQueue); 
     session.setQueueTitle("My Queue"); 
     session.setPlaybackState(buildState(PlaybackState.ACTION_PLAY)); 
     session.setMetadata(createRammsteinMetaData()); 

     this.mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.rammstein_sonne); 
     this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 


     if (tryToGetAudioFocus()) { 
      this.mediaPlayer.start(); 
      Log.d("AUDIOTAG", "Playing"); 
     } else { 
      Log.d("AUDIOTAG", "Playing not possible, no focus"); 
     } 
    } 

    private boolean tryToGetAudioFocus() { 
     int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 
     return result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED; 
    } 

Заранее спасибо. Orrimp

+0

Можете ли вы поделиться своим сегментом звукового кода? –

+1

Попробуйте 'this.mediaPlayer.setAudioStreamType (AudioManager.STREAM_VOICE_CALL);' –

+0

Предчувствующая идея, но она работает только с STREAM_MUSIC и без AudioStreamType. STREAM_VOICE_CALL и другие даже не играют. (Объем установлен в 1.0f) – Orri

ответ

2

Там, кажется, довольно большая ошибка! Локальная музыка из ресурсов не воспроизводится правильно, используя MediaPlayer.create (...);

Thx Reaz Murshed Я просто попытался использовать STREAM_MUSIC как настоящий поток с помощью Internet Music, и он работает. Перевести на использование setDataSource с URI ресурса! Используйте следующий фрагмент:

@Override 
    public void onPlayFromMediaId(String mediaId, Bundle extras) { 

     /* Set session stuff like queue, metadata and so on*/ 

     Uri myUri = resourceToUri(getBaseContext(), R.raw.rammstein_sonne); 
     try { 
      mediaPlayer = new MediaPlayer(); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mediaPlayer.setDataSource(getBaseContext(), myUri); 
      mediaPlayer.prepareAsync(); 
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mp) { 
        if (tryToGetAudioFocus()) { 
         mediaPlayer.start(); 
         Log.d("AUDIOTAG", "Playing"); 
        } else { 
         Log.d("AUDIOTAG", "Playing not possible, no focus"); 
        } 
       } 
      }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.d("AUTO", "EERORROR"); 
     } 
    } 

    public Uri resourceToUri(Context context, int resID) { 
     return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + 
       context.getResources().getResourcePackageName(resID) + '/' + 
       context.getResources().getResourceTypeName(resID) + '/' + 
       context.getResources().getResourceEntryName(resID)); 
    } 
+0

Приятно знать, что ваша проблема решена :) –