2016-09-08 6 views
0

終了ボタンまたはホームボタンを押したときに呼び出し音量を最大に変更して音量を復元するAndroidアプリがあります。ここにコードのスニペットがあります。 Androidの場合、onCreate()では動作しませんが、onResume()に入ります

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()(アプリがバックグラウンドであったことを意味する)によって開始された場合、ボリュームはmaxに変更され、前のボリュームに復元されます( onPause())。

コードはうまくいくようですが、数日間問題がどこにあるのか分かりませんでした。ありがとうございました!公式Androidのトレーニングからthis記事を引用

答えて

1

Android Activityのライフサイクルによれば、changeRingtone()メソッドを2回呼び出すと、onResumeメソッドでのみこのメソッドを呼び出す必要があります。あなたの活動を開始したと電話の間に来た後、一時停止するときに

Activity life cycle

+0

ありがとうございます! – Andrew

+0

あなたを助けてくれることは喜ばしいことでした:D – rockar06

0

:デフォルトでは

、システムがあなたの活動のレイアウトで各ビューオブジェクトに関する 情報を保存するためにバンドルインスタンスの状態を使用しています(そのように入力されたテキスト値 としてEditTextオブジェクト)。そのため、アクティビティ インスタンスが破棄されて再作成された場合、レイアウトの状態はコードなしで以前の状態に復元されます( )。ただし、 のアクティビティでユーザーの進捗状況を追跡するメンバー変数など、 に復元する状態情報がさらにある可能性があります。

さらに詳しい説明については、this StackOverFlow postも参照してください。

0

を呼び出します。

関連する問題