Android 安卓,有些东西赢了';无法在onCreate()中工作,但它将在onResume()中工作

Android 安卓,有些东西赢了';无法在onCreate()中工作,但它将在onResume()中工作,android,Android,我有一个Android应用程序,它可以将铃声音量更改为最大,并在按下退出或主页按钮时恢复音量。下面是代码片段 int ringMode; int ringVolume; protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); changeRingtone(); }

我有一个Android应用程序,它可以将铃声音量更改为最大,并在按下退出或主页按钮时恢复音量。下面是代码片段

int ringMode;
int ringVolume;

protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    changeRingtone();
}

@Override
protected void onResume() {
    changeRingtone();
}

private void changeRingtone() {
    ringVolume = audioManager.getStreamVolume(audioManager.STREAM_RING);
    ringMode = audioManager.getRingerMode();
    audioManager.setStreamVolume(audioManager.STREAM_RING,
         audioManager.getStreamMaxVolume(audioManager.STREAM_RING),
         AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}

@Override
protected void onPause() {
        audioManager.setStreamVolume(audioManager.STREAM_RING, ringVolume, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
        audioManager.setRingerMode(ringMode);
        super.onPause();
}
现在的问题是,当应用程序第一次启动时(
onCreate()
),它会将卷更改为max,但不会将其恢复到
onPause()
中的上一个卷。但是,如果应用程序是通过
onResume()
启动的(表示该应用程序处于后台),它会将卷更改为max,并将其恢复到
onPause()
中的上一个卷

代码似乎很好,但我已经好几天没有找出问题出在哪里了,请帮助,谢谢

引用Android官方培训的文章:

默认情况下,系统使用Bundle实例状态进行保存 有关活动布局中每个视图对象的信息(例如 输入到EditText对象中的文本值)。那么,如果你的活动 实例被销毁并重新创建,布局的状态为 已恢复到以前的状态,无需任何代码。然而, 您的活动可能有更多您想要的状态信息 还原,例如跟踪用户在中的进度的成员变量 活动

如需进一步解释,请参阅StackOverFlow帖子。

引用Android官方培训的文章:

默认情况下,系统使用Bundle实例状态进行保存 有关活动布局中每个视图对象的信息(例如 输入到EditText对象中的文本值)。那么,如果你的活动 实例被销毁并重新创建,布局的状态为 已恢复到以前的状态,无需任何代码。然而, 您的活动可能有更多您想要的状态信息 还原,例如跟踪用户在中的进度的成员变量 活动


如需进一步解释,请查看StackOverFlow post。

根据Android
活动的生命周期
,您将两次调用
changeRingtone()
方法,您应该仅在
onResume
方法中调用此方法


根据安卓
活动的生命周期,您要调用
changeRingtone()
方法两次,您应该只在
onResume
方法中调用此方法


暂停时将在活动启动后和通话之间拨打电话。

暂停时将在活动启动后和通话之间拨打电话。

很高兴帮助您:很高兴帮助您:D