我有 4 个活动。从家庭活动中,您可以导航到其他 3 个。该应用程序在每个视图上都有声音和一个按钮来静音。当我从家庭活动中打开 3 个活动之一时,“是否静音”值由 intent.putExtra 等传输......当我在家庭活动中静音时,它工作正常,但怎么能home-activity 知道我是否在 3 个活动之一中进行了更改,并在我使用返回按钮导航返回时静音并静音?这是覆盖后退按钮的正确方法吗?
感谢您的帮助!
我有 4 个活动。从家庭活动中,您可以导航到其他 3 个。该应用程序在每个视图上都有声音和一个按钮来静音。当我从家庭活动中打开 3 个活动之一时,“是否静音”值由 intent.putExtra 等传输......当我在家庭活动中静音时,它工作正常,但怎么能home-activity 知道我是否在 3 个活动之一中进行了更改,并在我使用返回按钮导航返回时静音并静音?这是覆盖后退按钮的正确方法吗?
感谢您的帮助!
在回答您的问题时,您需要开始每个活动以获得结果。假设您有 A -> B -> C -> D 每个都将启动以获得结果。然后,您可以在完成任何活动之前设置结果。这方面的例子可以在这里找到。
但是,我想我知道一个更简单的方法。如果我错了,请纠正我,但声音是否静音是否适用于整个应用程序?如果是这样,只需在首选项中设置一个布尔值,并在每个活动中检查它。你可以这样做:
将变量放入首选项:
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);
最灵活的方式是子活动在进行更改时发送广播 Intent,然后在所有活动中使用 onReceive。
另一种方法是使用 SharedPreferences 来存储状态。
这听起来像应用程序状态,我会说这属于活动之外,而不是从一个传递到另一个。最简单的方法是拥有一个存储应用程序状态(或其中一部分)的静态类。有很多方法可以做到这一点,但这可能是最简单的。如果您使用静态类,您可以从任何您希望的活动中设置和获取此信息。这是一个例子
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、自定义应用程序类或可以从依赖项容器中解析的共享单例中(如果您想澄清其中任何一个,请评论)。
你有很多选择。
1.您可以启动其他活动以获得结果,当您返回主应用程序时,检查活动返回的内容。
2.实际上在第二个活动中将android音量设置为静音,例如
mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
然后主要检查音量。
3.发送消息并使用Handler处理它,以防你有不同的线程。
希望这可以帮助。