按下 "Back"或 "Home"时 Android App 为 FC

标签 android android-activity android-mediaplayer

我创建了一个播放声音文件的 Android 应用程序。当我按下主页按钮时,我注意到声音继续播放并且不会停止,所以我在我的类中添加了以下功能:

@Override
protected void onStop()
{
    super.onStop();
    finish(); //kill the thread
    pS.reset(); //stop the sound
}
@Override
protected void onPause()
{
    super.onPause();
    finish(); //kill the thread
    pS.reset(); //stop the sound
}

当按下“返回”或“主页”时,它会停止音乐并且应用程序不会强制关闭。唯一的问题是,必须播放声音而不是 FC。如果没有声音播放,应用程序 FC。 我猜这是

pS.reset();

当声音不播放时不知道该做什么的功能。

如果我将它设置为:

pS = null;

而不是 pS.reset(),当按下“返回”或“主页”时,它会在没有 FC 的情况下做同样的事情吗?

我的pS初始化:

pS = MediaPlayer.create(iAct.this, R.drawable.sound);

编辑: 我注释掉了

pS.reset();

并添加

pS = null;

它没有 FC 但声音不会停止播放。

我更新了我的 onPause():

@Override
protected void onPause()
{
    super.onPause();
    if (pS.isPlaying()) {
        pS.pause(); //stop the sound
        finish();
    }
    else
        finish();
}

我的日志:

04-02 13:06:40.563: E/AndroidRuntime(925): FATAL EXCEPTION: main
04-02 13:06:40.563: E/AndroidRuntime(925): java.lang.RuntimeException: Unable to pause activity {com.testcom.myapp/com.testcom.myapp.MyappActivity}: java.lang.NullPointerException
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2354)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2311)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2291)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.access$1700(ActivityThread.java:117)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:938)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.os.Looper.loop(Looper.java:123)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-02 13:06:40.563: E/AndroidRuntime(925):  at java.lang.reflect.Method.invokeNative(Native Method)
04-02 13:06:40.563: E/AndroidRuntime(925):  at java.lang.reflect.Method.invoke(Method.java:507)
04-02 13:06:40.563: E/AndroidRuntime(925):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-02 13:06:40.563: E/AndroidRuntime(925):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-02 13:06:40.563: E/AndroidRuntime(925):  at dalvik.system.NativeStart.main(Native Method)
04-02 13:06:40.563: E/AndroidRuntime(925): Caused by: java.lang.NullPointerException
04-02 13:06:40.563: E/AndroidRuntime(925):  at com.testcom.myapp.MyappActivity.onPause(MyappActivity.java:119)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.Activity.performPause(Activity.java:3851)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1191)
04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2341)
04-02 13:06:40.563: E/AndroidRuntime(925):  ... 12 more

最佳答案

看看这里可能会帮助您解决问题:

How to mute and unmute it on the onPause and onResumee

有了它,您可以暂停并从停止的地方开始。

像这样:

全局:

MediaPlayer ourSong;

在你的 OnCreate 中

ourSong = MediaPlayer.create(yourActivity.this, YourSong);
        ourSong.setLooping(true);
ourSong.start();

在你暂停功能

    @Override
protected void onPause()
{
    super.onPause();
    if(ourSong.isPlaying)
    ourSong.pause(); //stop the sound
}

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

关于按下 "Back"或 "Home"时 Android App 为 FC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763820/

相关文章:

Android MediaPlayer 无法流式传输 SoundCloud 轨道

android - 如何在 Firebase 中执行以下查询? (多于一个where条件)

java - pubnub api回调方法错误不会覆盖其父类(super class)中的方法

java - 使用 AVD 进行测试时,LogCat 显示来自 Android 的错误

java - Android - fragment View 在 onCreateView 之外获取 NULL

android - FLAG_ACTIVITY_CLEAR_TOP 没有按预期工作

android - react native 音频播放器

java - 将字符串从 Activity 传递到 Fragment

java - MediaPlayer 只播放一次

java - Android Oreo 通知崩溃系统 UI