当前位置: 首页 > 知识库问答 >
问题:

如何将“停止MediaPlayer”添加到导航返回按钮

芮叶秋
2023-03-14

我是一个新的android工作室,所以很抱歉,如果这是一个非常愚蠢的问题,但我不能找到答案在任何地方网上。非常感谢任何帮助!

我已经建立了一个小的应用程序,有两个屏幕:一个主屏幕,一个屏幕二。主屏幕只是导航到屏幕二。从另一个屏幕,你可以播放/暂停/停止一首特定的歌曲,或者回到主屏幕。

我遇到的问题是当我导航到屏幕二时,当我按下“后退”按钮返回主屏幕时,我无法弄清楚如何将“停止”方法添加到这个按钮上。我在网上学习了一些教程来设置mediacontroller,它工作得很好,但这里我卡住了。

所以,我所需要的只是将onStop()方法添加到back按钮,这样当用户导航离开mediaplayer屏幕时,播放就会停止。

这是我的代码:

主activity(Play,pause,stop,stopPlayer,onStop方法)

 public void play(View v){
        if(player == null){
            player = MediaPlayer.create(this, R.raw.testmeditatie);
            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    stopPlayer();
                }
            });
        }

    player.start();
}

public void pause(View v){
    if(player!= null){
        player.pause();
    }
}

public void stop(View v){
    stopPlayer();
}

private void stopPlayer(){
    if(player!=null){
        player.release();
        player = null;
        Toast.makeText(this, "MediaPlayer released", Toast.LENGTH_SHORT).show();
    }

}

@Override
protected void onStop() {

    super.onStop();
    stopPlayer();
}

第一段代码:

public class FirstFragment extends Fragment {
@Override
public View onCreateView(
        LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState


) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_first, container, false);
}

public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    super.onStop();



    view.findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            NavHostFragment.findNavController(FirstFragment.this)
                    .navigate(R.id.action_FirstFragment_to_SecondFragment);
        }
    });
    
}
}

第二个片段:

public class SecondFragment extends Fragment {

@Override
public View onCreateView(
        LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState
) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_second, container, false);
}

public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    view.findViewById(R.id.button_second).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            NavHostFragment.findNavController(SecondFragment.this)
                    .navigate(R.id.action_SecondFragment_to_FirstFragment);


        }


    });


}

第二个fragment.xml中的按钮

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Play"
    android:onClick="play"
    />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pause"
    android:onClick="pause"
    />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Stop"
    android:onClick="stop"
    />


<Button
    android:id="@+id/button_second"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/previous"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

共有1个答案

桑思远
2023-03-14

只需重写onbackpressed()并调用stopPlayer()来释放媒体资源。

@Override
public void onBackPressed() {
    stopPlayer();
    super.onBackPressed();
}
 类似资料:
  • 我有以下问题: 到此: 使用:

  • 我有一个使用javax.swing和java.awt的图形用户界面,请求焦点是保持文本字段的焦点,这样用户就可以从键盘开始。然后,我为每个整数0-9添加了按钮,以及一个清晰的字段按钮。然而,现在的焦点总是从按钮开始。 当我单击一个按钮时,焦点仍然返回到文本字段,或者如果我启动焦点,它仍然保留在文本字段中,我如何解决这个问题,并在每次窗口打开时将焦点放在文本字段上? 数字按钮示例 文本字段代码 检查

  • 问题内容: 在以下活动中,我上面有一个片段和一个图像。片段只是一个较暗的操作栏,上面有图片。我正在尝试将左侧幻灯片菜单作为一个片段,以便可以在每次活动中使用它。 主要活动; 主要活动XML; 每个活动上应包含的标题栏片段; 标题栏片段XML; 如何在标题栏中实现导航抽屉? 问题答案: 尝试这样的操作,对于布局文件,您只需要 实现可以像这样简单。

  • 问题内容: 我想在每个页面上显示一个导航栏。在PHP中,我会编写导航栏,然后将其包含在其他页面上。我试图将导航栏模板包括或扩展到其他模板中,但是没有用。它仅输出“这是主页”。如何在每个模板中正确包含导航栏? layout.html index.html 问题答案: 使用所有页面共有的布局和导航创建基本模板。然后扩展此模板以创建实际的页面。向基本模板中添加可以在其他模板中覆盖的块。 base.htm

  • 我有一个应用程序,我正在编写,它已经包含了很多代码,我决定我想添加一个导航抽屉到主要的activity工具栏,但我不知道如何做,不创建一个新的导航抽屉项目,复制我的整个项目到它,这似乎是很多工作,有没有一个教程添加导航抽屉到一个现有的项目?

  • 我正在学习android和java的编程,需要一些关于android上“导航抽屉”的帮助。 我正在努力为抽屉项的单击侦听器添加一个switch语句,我使用的代码取自以下示例:http://hmkcode.com/android-creating-a-navigation-drawer/ 我应该如何准确地处理switch语句,以便从触摸其中一个项目开始新的活动? 非常感谢。 编辑 public vo