0

我有 4 个活动。从家庭活动中,您可以导航到其他 3 个。该应用程序在每个视图上都有声音和一个按钮来静音。当我从家庭活动中打开 3 个活动之一时,“是否静音”值由 intent.putExtra 等传输......当我在家庭活动中静音时,它工作正常,但怎么能home-activity 知道我是否在 3 个活动之一中进行了更改,并在我使用返回按钮导航返回时静音并静音?这是覆盖后退按钮的正确方法吗?

感谢您的帮助!

4

4 回答 4

1

在回答您的问题时,您需要开始每个活动以获得结果。假设您有 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);
于 2012-11-19T20:42:33.067 回答
1

最灵活的方式是子活动在进行更改时发送广播 Intent,然后在所有活动中使用 onReceive。

另一种方法是使用 SharedPreferences 来存储状态。

于 2012-11-19T20:43:34.293 回答
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、自定义应用程序类或可以从依赖项容器中解析的共享单例中(如果您想澄清其中任何一个,请评论)。

于 2012-11-19T20:52:07.503 回答
0

你有很多选择。
1.您可以启动其他活动以获得结果,当您返回主应用程序时,检查活动返回的内容。
2.实际上在第二个活动中将android音量设置为静音,例如

mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); 

然后主要检查音量。
3.发送消息并使用Handler处理它,以防你有不同的线程。
希望这可以帮助。

于 2012-11-19T20:43:35.927 回答