【问题标题】:How can I avoid audio stop (for few milliseconds) when screen orientation?屏幕方向时如何避免音频停止(几毫秒)?
【发布时间】:2017-07-14 16:13:40
【问题描述】:

我开发了一个在后台播放音频的应用。我遇到的问题是,当屏幕方向改变时,音频会停止几毫秒,然后继续。以下是相关代码:

import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Integer images[]={R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4,R.drawable.pic5, R.drawable.pic6,....   

    private int currImage=0;
    MediaPlayer mp;

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("currImageSaved", currImage);

        outState.putInt("time", (int)mp.getCurrentPosition());
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        int last_pos = savedInstanceState.getInt("time");
        mp.seekTo(last_pos);
        mp.start();
     }

     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState  != null)
        {
            currImage = savedInstanceState.getInt("currImageSaved", 0);
        }

        mp=MediaPlayer.create(this,R.raw.shlomoimagine);

        if (getResources().getConfiguration().orientation ==
                Configuration.ORIENTATION_PORTRAIT) {
            setContentView(R.layout.main_p);
        } else {
            setContentView(R.layout.main_l);
        }

        initializeImageSwitcher();
        setInitialImage();
        setImageRotateListener();
    }


    @Override
    protected void onPause() {
        super.onPause();
        mp.pause();

    }

    private void initializeImageSwitcher(){.....
    ......}

    private void setImageRotateListener() {......
    ....}

    private void setInitialImage() {....
    ....}

    private void setCurrentImage() {....
    ...}

    @Override
    protected void onResume() {
        super.onResume();
        mp.start();

    }
    ...
}

【问题讨论】:

  • 嘿!你检查过这个 stackoverflow.com/questions/17917994/…> 吗?
  • 谢谢,但我不知道在哪里添加 if(mp!=null &&.... 语句。
  • 我应该删除处理 mp 的 onRestoreInstanceState 吗?还有 onSaveInstanceState 吗?
  • 明显的选择是使用服务并将媒体播放器放在那里..
  • 嗨,Selvin,您能否给我更多详细信息...或相关信息的链接

标签: android audio restore screen-orientation


【解决方案1】:

您可以使用服务在后台播放音乐。它不会在方向更改后重新创建。或者你可以添加

android:configChanges="orientation|screenSize|keyboardHidden"

进入您的 manifest.xml 以防止在方向改变时重新进行活动。但是这次你应该在 onConfigurationChanged 方法中手动填充新布局。

【讨论】:

  • 我花了几个小时来实现媒体播放器的Service,确实在屏幕定向时音频一直在播放,但有两个问题不容忽视:首先,应用程序时音频没有停止被终止,其他问题是当我使用其他应用程序时,当这个应用程序移到后台时,音乐仍在播放。我开发了我的应用程序以在更改为其他应用程序时停止播放,并从返回时停止的同一点继续播放。这很好用......但是,问题仍然是短暂的临时音频停止。
  • 开始音乐或停止音乐有延迟吗?我不明白这个问题
  • 问题是当屏幕方向发生时,音乐会短暂停止然后继续。我不知道为什么,我想要的是在面向屏幕时连续播放而没有烦人的停止。
  • 我认为您编写了用于在 onStop 或 onPause 中停止音乐的逻辑。您可以检查 isFinishing() 值。如果为真则意味着活动将被销毁,如果为假则意味着活动将在方向改变后重新创建。因此,如果 isFinishing 为真,请按照您的逻辑执行,否则不要停止音乐。
  • 请看我只有 mp.pause();在 'onPause()' 方法中。
猜你喜欢
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2021-03-30
  • 1970-01-01
  • 2013-11-06
相关资源
最近更新 更多