声音播放来自Smarthpone扬声器,而不是Android Auto Speakers

时间:2016-01-15 10:12:07

标签: android android-mediaplayer

我是Android Auto的新手,仍在努力解决这个问题。 我已经成功地从我自己编程的应用程序中播放音乐,但音乐是从我的智能手机扬声器而不是汽车扬声器发出的。其他(样本)应用程序以正确的方式执行。

媒体系统的哪个部分负责处理此行为? 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

1 个答案:

答案 0 :(得分:2)

那里似乎有一个很大的错误!使用MediaPlayer.create(...);

,来自资源的本地音乐无法正常播放

Thx Reaz Murshed 我只是尝试将STREAM_MUSIC用作Internet音乐的实际流,它可以正常工作。 转换为使用资源URI的setDataSource! 使用以下代码段:

    @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));
    }