所以我有一个声音,我想在我的整个App中连续播放。但是,一旦应用进入后台,声音就会停止。我正在尝试在onStop()期间执行此操作。问题是,无论我是否停留在应用程序中,每次活动停止时都会调用onStop()。有没有办法区分这些情况?像这样:
override fun onStop() {
if [App is left but not destroyed] {
super.onStop()
mediaLength = mediaPlayer.currentPosition
mediaPlayer.pause()
}
else { //i.e. activity is left but the new activity is from the same app.
super.onStop()
}
}
编辑:
我尝试实现this answer,但不得不将其翻译为kotlin。我认为我做对了所有事情,但是Lifecycleobserver中出现了unresolved reference: mediaPlayer
。
这里是观察者:
package com.example.asdasd.soulfetch
import android.app.Application
import android.arch.lifecycle.Lifecycle
import android.arch.lifecycle.LifecycleObserver
import android.arch.lifecycle.OnLifecycleEvent
import android.arch.lifecycle.ProcessLifecycleOwner
class CheckLifeCycle: Application(), LifecycleObserver {
override fun onCreate() {
super.onCreate()
ProcessLifecycleOwner.get().getLifecycle().addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onAppBackground() {
MainActivity.mediaPlayer.pause()
}
}
这是MainActivity的相关部分
class MainActivity : AppCompatActivity() {
lateinit var mediaPlayer: MediaPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mediaPlayer = MediaPlayer()
fun playBordun() {
mediaPlayer = MediaPlayer.create(this, R.raw.cbordun)
mediaPlayer.isLooping = true
mediaPlayer.start()
}
playBordun()
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer.stop()
mediaPlayer.reset()
mediaPlayer.release()
}
知道我在这里缺少什么吗?
答案 0 :(得分:1)
您可以创建一个自定义Application类(扩展Application)并使用LifecycleObserver接口实现它,并在CustomApplication类中创建一个函数,并使用@OnLifecycleEvent(Lifecycle.Event.ON_STOP)对其进行注释,以便当应用程序在后台运行时,函数将被触发,在其中,您将放置逻辑以停止mediaPlayer(将其全局访问,以从应用程序的不同位置访问它)
要使用LifecycleObserver,您需要将LifeCycle添加到您的应用程序(这是一个Android体系结构组件),以下是链接: https://developer.android.com/topic/libraries/architecture/adding-components
答案 1 :(得分:1)
您无法通过活动获得此类功能。活动极易被破坏,重新创建。无论您的活动是否被破坏,您都应该使用Service来获得这种功能,因为该服务将持续存在。
此article较旧且过时,但仍可以通过音乐使用服务进行学习
答案 2 :(得分:0)
您可以使用 LifecycleObserver 检查应用程序是否在后台。
public class CheckLifeCycle extends Application implements LifecycleObserver {
@Override
public void onCreate()
{
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onAppBackground()
{
MainActivity.mediaPlayer.pause();
}
}
并在清单中添加类名称 CheckLifeCycle
<manifest >
....
<application
android:name=".CheckLifeCycle"
......
</application>
</manifest>
不要忘记在gradle中包括基本的支持库。
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"