Android,某些东西在onCreate()中不起作用,但它会在onResume()中

时间:2016-09-08 03:50:22

标签: android

我有一个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()被调用),它会将音量更改为最大值,但不会将其恢复为onPause()中的上一个音量。但是,如果应用程序由onResume()启动(表示应用程序处于后台),它会将音量更改为最大值,并将其恢复为onPause()中的上一个音量。

代码似乎还不错,但我好几天都没想到问题出在哪里,请帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

根据Android Activity的生命周期,您要调用changeRingtone()方法两次,您应该只在onResume方法中调用此方法。

Activity life cycle

答案 1 :(得分:0)

引用官方Android培训中的this文章:

  

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

有关进一步说明,请同时查看this StackOverFlow帖子。

答案 2 :(得分:0)

暂停时,

将在您的活动启动后和电话之间进行呼叫。