gpt4 book ai didi

android - 如何判断用户是否最终退出了android应用程序中的所有 Activity

转载 作者:行者123 更新时间:2023-11-29 14:01:57 26 4
gpt4 key购买 nike

我想将 ringvolume 设置为 0当用户打开我的教学应用程序时,然后在用户退出时将其返回到原始音量。这样做的最佳方法是什么?
我可以将音量设置为 0没问题
困难在于知道何时恢复它,我的应用程序有多个经常使用的 Activity ,我担心将音量设置为 0 的性能影响对于每个 onCreate()并为每个 onStop() 恢复它它也显得凌乱且劳动密集!
有没有人有什么建议?

作为附录,

我想到了一个方法可以做到一半:
创建一个 bool 值 leaving =true;
当用户为我的下一个 Activity 打开新 Intent 时,将其设置为 true
onPause()使用这个变量来检查用户是“离开”还是只是打开另一个“我的 Activity ”
这仍然意味着我必须在所有 onResume() 中将铃声设置为静音
有没有人有任何进一步的解决方案?

最佳答案

这里的问题是您的应用程序在运行时可能并不总是位于 Activity 堆栈的顶部。如果用户切换到另一个应用,或者某些闹钟或电话接管了焦点怎么办?

这里有一些我会去实现你正在尝试做的事情的方法(从下面的评论中扩展):

选项 1:

如果静音操作不会影响您的应用程序的性能(根据我自己的经验,我怀疑它不会),您可以使用单个抽象基类简化您在问题中建议的解决方案,重载 onResume ()onPause() 以确保您在用户 returns to your already created 时捕获事件 Activity :

public abstract class TeachingAppActivity extends Activity {
public void onResume() {
super.onResume();
// Perform mute action here...
}

public void onPause() {
super.onPause();
// Perform unmute action here...
}
}

public class MyActivity1 extends TeachingAppActivity {
}

public class MyActivity2 extends TeachingAppActivity {
}

这将简化您的代码,但将操作包含在您的 Activity 中:如果另一个应用程序获得焦点,铃声将恢复。如果用户返回到 MyActivity2,铃声将再次静音。

选项 2:

如果静音操作确实会影响您应用的性能,或者您只是不想在每个 Activity 的 onResume()onPause()< 中执行它/em>,你可以改用 worker thread和一个 status bar notification :

  1. 在每个 Activity 中 onResume();启动一个 AsyncTask(或 Runnable 任务),您可以将 Activity 子类化以与您的其他 Activity 共享此代码。
  2. 此工作线程首先检查,然后静音。如果音量发生变化,它会显示一个通知图标,通知用户音量已被静音。
  3. 然后工作线程可以终止,执行此检查和操作而不影响 UI 性能。
  4. 音量将在应用程序运行期间保持静音,如果用户跳转到另一个应用程序(或来电/消息获得焦点),他/她仍然知道音量已静音,因为通知图标是仍然存在。
  5. 如果用户按下通知图标,广播 Intent 会恢复音量。这也可以由您应用中的按钮或操作触发。

如果用户按下主页按钮,或在您的应用中重复按下返回按钮,音量将不会恢复。这是故意的,因为他们没有“退出”你的应用程序,他们只是移动到 Activity 堆栈的底部。规则将是:只要通知图标可见,您的应用就已将音量设为静音。

这里的额外好处是,如果另一个应用改变了音量,您的应用将始终检查您的任何 Activity 何时再次获得焦点。

关于android - 如何判断用户是否最终退出了android应用程序中的所有 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096899/

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