我正在尝试制作一个 android 应用程序,当电池电量低于 10% 时会播放警报。为什么我的代码不起作用?

I'm trying to make an android app where an alarm plays when the battery gets under 10%. Why isn't my code working?

当我不使用 onPreparedListener 时会播放音频文件 (.mp3),但在文件尝试重播一段时间后出现错误(因为它显然没有监听状态)。所以基本上代码是检查电池状态,如果它是 10% 或以下,它会播放警报声音,我还有一个按钮,我可以单击它来停止声音。现在有了 onPreparedListener,警报声就不再播放了。我做错了什么?

    tv_battery = (TextView) findViewById(R.id.tv_battery);
    final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarm);
    Button b = (Button) findViewById(R.id.stop_alarm);
    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);


    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(mp.isPlaying()) {
                mp.stop();
                mp.release();
            }
        }
    });
    runnable = new Runnable() {
        @Override
        public void run() {
            int level = (int) batteryLevel();

            tv_battery.setText("Battery: " + level + "%");
            handler.postDelayed(runnable, 5000);

            if(level <=  10) {

                mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                    @Override
                    public void onPrepared(final MediaPlayer mp) {
                        CountDownTimer count = new CountDownTimer(7000, 1000) {

                            public void onTick(long millisUntilFinished) {
                                mp.start();
                            }

                            public void onFinish() {
                                //code fire after finish
                                mp.stop();
                            }

                        };
                        count.start();
                    }

我想你有地方 mp.start();在错误的地方请在 count.start() 之前移动它;如下:

CountDownTimer count = new CountDownTimer(7000, 1000) {
     public void onTick(long millisUntilFinished) {

     }

     public void onFinish() {
            //code fire after finish
            mp.stop();
     }
};
mp.start();
count.start();

如果媒体播放器在电池电量低于 10 时已经启动,则也更正以下条件,否则媒体播放器即使在启动后也再次准备好:

if(level <=  10 && !mp.isPlaying()) {