java - 在屏幕锁定的情况下处理音量按钮
问题描述
目前,我正在编写简单的 android studio 脚本,并且在锁定移动屏幕时我必须降低音量。
请看一下我的脚本:
public class MainActivity extends AppCompatActivity {
public MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final BroadcastReceiver vReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
initAudio(getApplicationContext(), "https://www.w3schools.com/html/horse.mp3");
}
};
registerReceiver(vReceiver, new IntentFilter("android.media.VOLUME_CHANGED_ACTION"));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
event.startTracking();
initAudio(getApplicationContext(), "https://www.w3schools.com/html/horse.mp3");
return true;
}
return super.onKeyDown(keyCode, event);
}
public void initAudio(final Context context, String url) {
if (mediaPlayer == null) {
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(context, Uri.parse(url));
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
killMediaPlayer();
}
});
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "Fail", Toast.LENGTH_LONG).show();
killMediaPlayer();
}
}
}
public void pauseAudio() {
if (!(mediaPlayer == null)) {
mediaPlayer.pause();
}
}
public void startAudio() {
if (!(mediaPlayer == null)) {
mediaPlayer.start();
}
}
public void killMediaPlayer() {
if (mediaPlayer != null) {
try {
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我应该怎么做才能解决这个问题?没有错误,该脚本仅在我的屏幕解锁时才有效。你能帮我解决这个问题吗?
非常感谢。
解决方案
推荐阅读
- python - srdoc 的叶子问题
- java - 在 MYSQL DB 中存储日期值
- javascript - 除非指定,否则不允许特殊字符
- postgresql - docker-compose up postgresql 错误,chmod: /var/lib/postgresql/data: Operation not allowed
- c# - .NET Core Topshelf 服务和 Serilog
- c - 在 FreeRTOS 中处理队列最经济的方法是什么?
- c# - 如果从另一个视图的 ajax 调用启动,控制器不会返回视图
- r - stringi::stri_unescape_unicode() 用于更长/更稀有的 unicode 字符?
- r - 找不到 KDE 安装 - RKWard
- python - 如何更改 IPAddressField 错误消息