我有4个活动。在家庭活动中,您可以导航到其他3个人。应用程序有声音,每个视图上都有一个按钮来静音。当我从家庭活动中打开3个活动中的一个时,“静音或不静音”值由intent.putExtra等转移...当我在家庭活动中静音时,它工作正常,但怎么能家庭活动知道我在3个活动中的一个中做了改变,然后静音,当我用后退按钮导航时声音静音?这是覆盖后退按钮的正确方法吗?
感谢您的帮助!
答案 0 :(得分:1)
在回答您的问题时,您需要为结果启动每项活动。说你有 A - > B - > C - >每个都将开始结果。然后,您可以在完成任何活动之前设置结果。可以找到here的例子。
然而,我认为我知道一种更简单的方法。如果我错了,请纠正我,但声音是否静音适用于整个应用程序?如果是这样,只需在首选项中设置一个布尔值,并在每个活动中检查它。你可以这样做:
将变量放在prefs中:
Boolean shouldBeep = true;
//inside the mute/unmute button listener(or whatever)
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("shouldBeep", shouldBeep);
editor.commit();
然后检索该值:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean shouldBeep = settings.getBoolean("shouldBeep", false);
答案 1 :(得分:1)
最灵活的方式是子活动在进行更改时发送广播Intent,然后在所有活动中使用onReceive。
另一种方法是使用SharedPreferences来存储状态。
答案 2 :(得分:1)
这听起来像应用程序状态,我会说这属于活动之外,而不是从一个传递到另一个。最简单的方法是使用一个静态类来存储应用程序状态(或其中的一部分)。有很多方法可以实现这一目标,但这可能是最简单的方法。如果您使用静态类,则可以从任何您希望的活动中设置和获取此信息。这是一个例子
public class AudioPreferences {
private static boolean isMuted = false;
public static boolean isMuted() {
return isMuted;
}
public static boolean setMuted(boolean muted) {
isMuted = muted;
return isMuted;
}
public static boolean toggleMuted() {
isMuted = !isMuted;
return isMuted;
}
}
其他选项是将它存储在SharedPreferences,自定义Application类或可以从依赖容器中解析的共享单例中(如果您想澄清其中任何一个,请发表评论)。
答案 3 :(得分:0)
你有很多选择 1.你可以start the other activities for result当你回到你的主要应用程序时,检查返回的活动 2.实际上将android音量设置为静音,如第二个活动
mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
然后检查主音量。
3.发送消息并使用Handler处理它,以防您有不同的线程
希望这会有所帮助。