この変更を確認するために、ストリームボリュームとハドラーを内部に持つサービスを設定するメソッドがあります
ストリームの設定方法:
private setStreams(Context context)
{
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setStreamVolume(AudioManager.STREAM_RING, ringerVol, 0);
am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, notifVol, 0);
am.setStreamVolume(AudioManager.STREAM_MUSIC, mediaVol, 0);
am.setStreamVolume(AudioManager.STREAM_ALARM, alarmVol, 0);
am.setStreamVolume(AudioManager.STREAM_SYSTEM, systemVol, 0);
am.setStreamVolume(AudioManager.STREAM_VOICE_CALL, incallVol, 0);
am.setStreamVolume(6, btVol, 0);
//some other code
}
サービス:
public class SystemSettingsChangeObserverService extends Service {
private ContentObserver observer;
private static Context context;
@Override
public void onCreate(){
super.onCreate();
context = this;
observer = new ContentObserver (new Handler()) {
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//here I check new values of streams
}
}
...
問題は、onChange が setStreams メソッドの「その他のコード」の後で呼び出され、すべてのストリームの setStreamVolume の後では呼び出されないことです。アプリケーション内でボリュームが変更されたかどうかを知る必要があるため、これが必要です。ありがとうございました。