0

この変更を確認するために、ストリームボリュームとハドラーを内部に持つサービスを設定するメソッドがあります

ストリームの設定方法:

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 の後では呼び出されないことです。アプリケーション内でボリ​​ュームが変更されたかどうかを知る必要があるため、これが必要です。ありがとうございました。

4

1 に答える 1

0

ブールキー「fromApp」を SharedPreferences に配置し、SystemSettingsChangeObserverService で確認してから、キーを false に設定することで解決しました

于 2014-02-14T09:00:31.660 に答える