我正在尝试制作一个 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()) {
当我不使用 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()) {