副題:本体設定が変更されたことを取得する
標題について調べたところ、下記にコードがありました。
音量設定の取得について
このコードを参考に、下記のとおり私なりに作ってみました。このプログラムの実行中に、音量を変えると、ログが表示されます。
これは、本体設定が変更されたことを取得するためのプログラムなのですね。
一部の機種においては、Settings.System.VOLUME_MUSICの値が11に固定されています。固定されているということは、変更が発生しないということでありますので、その結果、ContentObserver#onChange()が呼ばれないということになってしまいます。この機種においては、"volume_music_speaker"に有効な値が代入されていました。
"volume_music_speaker"は「本体設定」の値の一覧取得プログラムを使って調べました。
public class MainActivity extends Activity{
final private String TAG = "MainActivity";
ContentResolver cr;
MyObserver mo;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cr = getContentResolver();
int i = Settings.System.getInt(cr, "volume_music_speaker", -1);
Uri u;
if(i>=0){
u = Settings.System.getUriFor("volume_music_speaker");
}
else{
u = Settings.System.getUriFor(Settings.System.VOLUME_MUSIC);
}
mo = new MyObserver(new Handler());
cr.registerContentObserver(u, true, mo);
}
@Override
protected void onDestroy() {
Log.v(TAG, "onDestroy()");
cr.unregisterContentObserver(mo);
super.onDestroy();
}
private class MyObserver extends ContentObserver{
final private String TAG = "It's ME!";
public MyObserver(Handler h){
super(h);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
Log.v(TAG, "onChange(). uri==" + uri +
". volume==" + am.getStreamVolume(AudioManager.STREAM_MUSIC));
}
@Override
public void onChange(boolean selfChange){
onChange(selfChange, null);
}
}
}
0 件のコメント:
コメントを投稿