如何在安卓设备上恢复我的音频?

3

我必须实现一个应用程序来创建带有暂停和继续状态的音频,并且当我的应用程序启动时,音频将开始播放。当我在模拟器上按下返回按钮时,音频将处于暂停状态,但是当我的活动从停止状态回到前台时,我的音频不会恢复播放。这是我的代码。

public class Audio_Activity extends Activity 
{
    private  MediaPlayer mp;
    Button btnStartStop ;
    Button btnChapter ;
    Button btnOne;
    Button btnTwo;
    Button btnThree;
    Button btnFour;
    Button btnFive;
    int length;


    ImageView imgVw;
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.audio);
        init();

        mp=MediaPlayer.create(Audio_Activity.this,R.raw.ennamo_yadho);
        Log.e("Song is playing","in  Mediya Player ");

        if(mp!=null)
        {
                mp.setLooping(false);
                mp.start();
                btnChapter.setEnabled(false);
                System.out.println("B4 button Click!!!!");
        }

        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
        {
            @Override
            public void onCompletion(MediaPlayer mp) 
            {
                mp.stop();
                mp.release();
                btnChapter.setEnabled(true);
                System.out.println("Music is over and Button is enable !!!!!!");
            }
        });


        btnStartStop.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View arg0) 
            {
                if(mp.isPlaying())
                {
                    if(mp!=null)
                    {
                            mp.pause();
                    }

                }

                else
                {
                    // Resume song
                    if(mp!=null)
                    {
                            mp.start();
                    }
                }
            }
        });


        btnOne.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v) 
            {
                imgVw.setImageResource(R.raw.chocklate);
                }
            }
        );

        btnTwo.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                imgVw.setImageResource(R.raw.creame);
            }
        });

        btnThree.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                imgVw.setImageResource(R.raw.schocklate);

            }
        });

        btnFour.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                imgVw.setImageResource(R.raw.pinapple);

            }
        });

        btnFive.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                imgVw.setImageResource(R.raw.strobery);

            }
        });
    }

     @Override
        protected void onResume() 
        {
            super.onResume();
            System.out.println("Activity is Resume !!!");
        }

    @Override
    protected void onStart() 
    {
        super.onStart(); 
        System.out.println("Activity is Started !!!");
    }


     @Override
        protected void onRestart() {
            super.onRestart();
            System.out.println("Activity is Re-Started !!!");
            if(mp.isPlaying())
            {
                if(mp!=null)
                {
                    length=mp.getCurrentPosition();
                    mp.seekTo(length);
                    mp.start();
                }
            }

        }



        @Override
        protected void onPause() {
            super.onPause();
            System.out.println("Activity is Pause!!!");
        }

        @Override
        protected void onStop() {
            super.onStop();
            System.out.println("Activity is Stop !!!");
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            System.out.println("Activity is Destroyed !!!");
        }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) 
        { //Back key pressed
           //Things to Do
            if(mp!= null)
            {
                if(mp.isPlaying())
                {
                    mp.pause();
                    //mp=null;
                }
            }
            finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

音频在停止服务后无法播放。我正在使用Media Player来播放音频,但是当我停止服务时,音频不再播放。我该怎么解决这个问题? - Chintan Khetiya
你正在使用 finish() 方法,这意味着你的 mp 将被销毁。 - njzk2
2个回答

0

在编程方面,你应该使用Android MediaPlaybackService来进行后台播放、暂停、停止或通过点击通知打开活动。当点击返回按钮时,它将绑定一个PendingIntent与按钮单击事件或通知栏上的按钮以控制音频播放。

使用这个Gist Code来进行音频播放器的编写,尝试使用MediaPlaybackService类或尝试反向工程这个owncloud代码。


-1

你的代码不正确。你不应该去打扰返回按钮等,而是要关注活动生命周期。你应该在onPause()中暂停音频,在onResume()中恢复音频。所以将代码移到onPause()中,摆脱onKeyDown(),并将代码从onRestart()移至onResume()。删除所有不需要的方法,例如onDestroy()onStart()等。


当我点击返回按钮时,我的音乐会暂停,但当我重新启动活动时,我的音乐不会恢复播放。音乐将从起始位置开始播放,而不是从暂停的当前位置开始。我不知道该怎么做。我已经删除了onDestroy()、onStart()和onKeyDown()方法,但即使这样,我的音乐仍然无法恢复播放。 - tazeen
当我在Android中重新启动我的活动时,如何从当前位置开始播放音频?请给我解决方案。 - tazeen
为什么当我重新启动我的活动时,我的音频会重新开始播放? - tazeen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接