如何以编程方式停止 Android 中另一个 activity 的媒体播放器?

How to stop media player from another activity in Android programmatically?

我正在尝试在我的应用程序中使用媒体播放器,并且我试图阻止来自其他 activity 的媒体播放器,我的编码如下:

第一个活动:

public void stop() {

    if (playPause == false) {

        control.setBackgroundResource(R.drawable.play);

        mediaPlayer.stop();
        new Player().cancel(true);
        media.stop();
        media.reset();
        mediaPlayer.reset();
        if (mediaPlayer.isPlaying())
            mediaPlayer.stop();
        mediaPlayer.reset();
        media.stop();

        playPause = true;
    } else {
        control.setBackgroundResource(R.drawable.pause);
        if (intialStage) {
            new Player()
                    .execute(URL);
        } else {
            if (!mediaPlayer.isPlaying())
                mediaPlayer.start();
        }
        playPause = false;
    }
}

第二个活动:

计时器结束后必须停止媒体播放器:

        @Override
        public void onFinish() {
            textViewTime.setText(hmsTimeFormatter(timeCountInMilliSeconds));
            // call to initialize the progress bar values
            setProgressBarValues();
            // hiding the reset icon
            imageViewReset.setVisibility(View.GONE);
            // changing stop icon to start icon
            imageViewStartStop.setImageResource(R.drawable.icon_start);
            // making edit text editable
            editTextMinute.setEnabled(true);
            // changing the timer status to stopped
            timerStatus = TimerStatus.STOPPED;

            MainActivity main = new MainActivity();
            main.stop();
        }

    }.start();
    countDownTimer.start();
}

以上编码显示错误:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setBackgroundResource(int)' on a null object reference
                                                                         at com.digitamatix.mukilfm.MainActivity.stop(MainActivity.java:549)

我必须先停止媒体播放器 activity 请帮助我编码以解决我的问题

(基于您发布的代码)

看起来这里的问题是您正在调用一个方法,该方法从不可见的 activity 引用 xml resource

您正在创建 MainActivityistance,但是,由于它从未显示,因此永远不会触发 onCreate 和其他生命周期方法,而您的 control 是空。

您至少有 3 种方法:

  1. 创建一个不引用任何 xml 资源的方法,它只是停止播放器 1B.尝试使用 setResult,引用 运行 activity 的新实例不是一个好习惯。只需使用 StartActivityForResult(activityB)setResult(res) 来触发 onActivityResult 回调。
  2. 将播放器放在 中,无论您身在何处都可以参考它
  3. 使用片段导航代替activity并在主activity
  4. 中引用播放器

希望对您有所帮助!

看到我已经开始 activity 和 startActivityForResult 。 onActivityResult 你会得到结果。

startActivityForResult(Activity1.createIntent(this), 1001);


//handle callback result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == 1001) {

        }
    }

}

下面的代码将调用下一个 activity,您要回调并完成 activity。您可以为此意图传递任何值。

 Intent intent = new Intent();
 setResult(RESULT_OK, intent);
 finish();

因此,根据要求,您可以使用它。停止媒体播放器。其他选项 local broadcast 也是。 希望对您有所帮助。