Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么MediaPlayer强制关闭我的应用程序?_Android_Android Mediaplayer - Fatal编程技术网

Android 为什么MediaPlayer强制关闭我的应用程序?

Android 为什么MediaPlayer强制关闭我的应用程序?,android,android-mediaplayer,Android,Android Mediaplayer,我试图制作一个倒计时计时器,当它达到0时播放声音,但每当它试图播放声音时,它就会强制关闭。我很确定我的代码是正确的,但我不明白为什么它会关闭。请帮忙,为什么这个力会关闭 import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.MediaPlaye

我试图制作一个倒计时计时器,当它达到0时播放声音,但每当它试图播放声音时,它就会强制关闭。我很确定我的代码是正确的,但我不明白为什么它会关闭。请帮忙,为什么这个力会关闭

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {


Button start, stop;
int minCount, secCount;
Chronometer count;
boolean viberate, running;
SharedPreferences getPrefs;
MediaPlayer alarm;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initilize();
    count.start();

    count.setOnChronometerTickListener(new OnChronometerTickListener() {

        @Override
        public void onChronometerTick(Chronometer chronometer) {
            if (running) {
                secCount--;
                updateDisplay();
            }

        }

    });
    start.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            running = true;
            alarm.release();

            if (minCount <= 0 && secCount <= 0) {
                nothing();
            }
        }
    });
    stop.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            running = false;
        }
    });





protected void done() {
    // TODO

    boolean music = getPrefs.getBoolean("Sound", true);
    if (music && alarm != null) {
        alarm.start(); //line 179 this is the line that causes the force close

    }
    running = false;
    Toast.makeText(this, "Times Up!!!", Toast.LENGTH_LONG).show();
}

private void initilize() {

    start = (Button) findViewById(R.id.start);
    stop = (Button) findViewById(R.id.stop);
    second = (TextView) findViewById(R.id.second);
    minute = (TextView) findViewById(R.id.minute);
    minCount = 1;
    secCount = 0;
    count = (Chronometer) findViewById(R.id.chronometer1);                           running = false;
    getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());
    alarm = MediaPlayer.create(MainActivity.this, R.raw.finished);
}

private void updateDisplay() {
    if (minCount <= 0 && secCount <= 0) {
        done();

    }
    if (secCount < 0) {
        minCount--;
        secCount = 59;
    }


    if (secCount < 0) {
        secCount = 59;
        second.setText("59");

    } else if (secCount <= 9) {
        second.setText("0" + secCount + "");
    } else {
        second.setText(secCount + "");
    }

    if (minCount < 0) {
        minCount = 59;
        minute.setText("59 :");

    } else if (minCount <= 9) {
        minute.setText("0" + minCount + " :");
    } else {
        minute.setText(minCount + " :");
    }


}


@Override
protected void onStop() {
    super.onStop();
    alarm.release();
}

}

您有一个非法状态异常,但代码看起来很好

alarm = MediaPlayer.create(MainActivity.this, R.raw.finished);
请确保已完成的流不是非法格式。

尝试使用

try {
            alarm.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

当您将数据源设置为mediaplayer时,如果强制关闭,LogCat会进行堆栈跟踪。您应该编辑您的问题以添加LogCat输出。
music==true
应该是
if(music)
不要使用
=
boolean@codeMagic您可以将
==
与布尔值一起使用,只是不使用
==
是惯例。是的,我知道,但在大多数情况下,坚持惯例是最好的。我不是说这是问题所在,也不是说它会被贴出来作为答案,我只是给出了一些有用的答案advice@codeMagic,我知道我只是想知道为什么,因为有时候我会用它。但是谢谢A--C给出了答案。你能解释一下你说的“确保你的流完成不是非法格式”是什么意思吗@原始文件夹中的lazynijafinished.mp3或finished.wav。它是android支持的文件吗?试着用工作文件替换它,以确保安全。
try {
            alarm.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }