gpt4 book ai didi

android - 识别android应用程序何时在backGround中运行-按下Home按钮

转载 作者:行者123 更新时间:2023-12-03 00:17:11 28 4
gpt4 key购买 nike

我在应用程序中将声音设置作为偏好设置,然后设法使用以下方式禁用和启用了声音

   Settings.System.putInt(getContentResolver(), Settings.System.SOUND_EFFECTS_ENABLED, 0); 


   Settings.System.putInt(getContentResolver(), Settings.System.SOUND_EFFECTS_ENABLED, 1);

但是当通过按下主屏幕按钮暂停应用程序时,我需要将声音保留为默认值。我找不到任何方法来重新确定这样做的方法。

我知道尝试在任何 Activity 生命周期方法中执行此操作都不会起作用。
有什么方法可以识别我的应用程序在后台运行吗? (我正在考虑整个应用程序的 Angular ,这样我就可以在用户将声音最小化时启用声音,并在他进入我的应用程序时将其禁用)

提前致谢

最佳答案

首先,我使用了一个android.app.Application实例(我们将其称为MyApplication),该实例具有一个Timer,TimerTask,一个常量,表示从一个 Activity 到另一个 Activity 的过渡可能需要的最大毫秒数(我去了(值为2s)和一个 bool(boolean) 值,指示应用程序是否在“后台”:

public class MyApplication extends Application {

private Timer mActivityTransitionTimer;
private TimerTask mActivityTransitionTimerTask;
public boolean wasInBackground;
private final long MAX_ACTIVITY_TRANSITION_TIME_MS = 2000;
...

该应用程序还提供了两种启动和停止计时器/任务的方法:
public void startActivityTransitionTimer() {
this.mActivityTransitionTimer = new Timer();
this.mActivityTransitionTimerTask = new TimerTask() {
public void run() {
MyApplication.this.wasInBackground = true;
}
};

this.mActivityTransitionTimer.schedule(mActivityTransitionTimerTask,
MAX_ACTIVITY_TRANSITION_TIME_MS);
}

public void stopActivityTransitionTimer() {
if (this.mActivityTransitionTimerTask != null) {
this.mActivityTransitionTimerTask.cancel();
}

if (this.mActivityTransitionTimer != null) {
this.mActivityTransitionTimer.cancel();
}

this.wasInBackground = false;
}

该解决方案的最后一部分是从所有 Activity 的onResume()和onPause()事件,或者最好在一个基本Activity中添加对每个方法的调用,您的所有具体Activity都将继承自该基本Activity:
@Override
public void onResume()
{
super.onResume();

MyApplication myApp = (MyApplication)this.getApplication();
if (myApp.wasInBackground)
{
//Do specific came-here-from-background code
}

myApp.stopActivityTransitionTimer();
}

@Override
public void onPause()
{
super.onPause();
((MyApplication)this.getApplication()).startActivityTransitionTimer();
}

因此,在用户只是在您的应用程序的 Activity 之间导航的情况下,离开 Activity 的onPause()会启动计时器,但是几乎立即输入的新 Activity 会在达到最大过渡时间之前取消计时器。因此wasInBackground将为假。

另一方面,当 Activity 从启动器进入前台,设备唤醒,结束电话等时,很有可能在此事件之前执行了计时器任务,因此wasInBackground设置为true。

How to detect...复制
感谢 d60402

关于android - 识别android应用程序何时在backGround中运行-按下Home按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524229/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com