android - 如何检测某人何时离开应用程序?
问题描述
我有一个在我的应用程序中播放声音的按钮。如果用户离开屏幕并让应用程序在后台运行,它仍然会播放。如何检测用户何时在应用程序之外,以便我可以停止在后台播放声音?
应用内当前停止按钮的主要活动代码
stop_button = findViewById(R.id.stop_button);
stop_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (longplay_button.isChecked() && meme_Sound_Media_Player.isPlaying()) {
meme_Sound_Media_Player.pause();
meme_Sound_Media_Player.seekTo(0);
longplay_button.setEnabled(true);
} else if (memeSoundMediaPlayer.isPlaying()) {
memeSoundMediaPlayer.pause();
memeSoundMediaPlayer.seekTo(0);
longplay_button.setEnabled(true);
}
else {
Toast.makeText(getBaseContext(), "nothing is playing", Toast.LENGTH_SHORT).show();
}
if (inactiveButton.isShown()) {
inactiveButton.setImageResource(R.drawable.button_pressed);
inactiveButton.setEnabled(true);
Toast.makeText(getBaseContext(), "Playback Stopped", Toast.LENGTH_SHORT).show();
}
}
});
}
错误 1
错误 2
解决方案
在你的 build.gradle 文件中拉取这个依赖:
dependencies {
implementation "android.arch.lifecycle:extensions:1.1.1"
}
然后在你的 Application 类中,使用这个:
public class MyApplication extends Application implements LifecycleObserver {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackgrounded() {
Log.d("MyApp", "App in background");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForegrounded() {
Log.d("MyApp", "App in foreground");
}
}
更新您的 AndroidManifest.xml 文件:
<application
android:name=".MyApplication"
....>
</application>
推荐阅读
- angular - Ionic 3 键盘插件不起作用
- c - 向开发板写入和读取数据
- java - MediaStore.Audio.Media.DATA 可以抛出无效路径吗?
- android - Room @Relation 与复合主键
- mysql - MySQL:如果在第二个表中找到匹配的 id 并添加缺少的内容,如何“覆盖”第一个表中的数据
- php - 像操作员不工作
- latex - TexStudio 的自动生成的 cwl 文件似乎已损坏
- database - Google BigQuery“bq show”命令返回:sqlite3.OperationalError: database is locked
- python - Python 是否具有与 std::move 类似的功能?
- sql - 在迁移之间执行代码