2011年11月7日月曜日

ContentResolverで本体設定情報を取得する

ContentResolverで本体設定情報を取得する

ContentResolverの振る舞いを調べるため、その学習・実験材料として、代表的なコマンドであるマナーモードに関する情報を取得します。

マナーモードを取得する方法は2種類あります。
一方はAudioManagerを使う方法であり、他方はContentResolverを使う方法です。
本当にマナーモードを取得したいのであれば、AudioManagerを使えばよろしいです。
両方の方法を実装した、実用的なサンプルプログラムを掲載しておきます。
マナーモードは、Settings.Secureに属するのではなく、Settings.Systemに属し、mode_ringerという名前です。

public class Resolver2Activity extends Activity


    implements
    OnClickListener
    {
    boolean bFlag;
    Button bu;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bu = (Button)findViewById(R.id.Button);
        bu.setOnClickListener(this);
        bFlag = true;
        
        int iRet;
        String s;
        AudioManager am;
        am = (AudioManager)getSystemService(AUDIO_SERVICE);
        iRet = am.getRingerMode();
        switch(iRet){
        case AudioManager.RINGER_MODE_SILENT:
            s = "RINGER_MODE_SILENT";
            s = s + " : " + String.valueOf(AudioManager.RINGER_MODE_SILENT);
            break;
        case AudioManager.RINGER_MODE_NORMAL:
            s = "RINGER_MODE_NORMAL";
            s = s + " : " + String.valueOf(AudioManager.RINGER_MODE_NORMAL);
            break;
        case AudioManager.RINGER_MODE_VIBRATE:
            s = "RINGER_MODE_VIBRATE";
            s = s + " : " + String.valueOf(AudioManager.RINGER_MODE_VIBRATE);
            break;
        default: s = ""; break;
        }
        TextView tv;
        tv = (TextView)findViewById(R.id.TextAudioManager);
        tv.setText(s);
    }
    
    @Override
    public void onClick(View v) {
        if(v==bu) UsingContentResolver();
    }
    
    void UsingContentResolver(){
        ArrayAdapter<String> aa;
        ListView lv;
        ContentResolver cr;
        Cursor c;
        Uri u;
        String p[];
        TextView tv;
        
        aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        cr = getContentResolver();
        tv = (TextView)findViewById(R.id.Text);
        if(bFlag==true){
            u =  Settings.System.CONTENT_URI;
            tv.setText("Settings.System");
            bFlag = false;
        }
        else{
            u =  Settings.Secure.CONTENT_URI;
            tv.setText("Settings.Secure");
            bFlag = true;
        }
        p = new String[]{
                Settings.NameValueTable.NAME,
                Settings.NameValueTable.VALUE
        };
        c = cr.query(u, p, Settings.NameValueTable.NAME + " = 'mode_ringer'", null, null);
        if(c.moveToFirst()==true){
            do{
                String s;
                s = c.getString(c.getColumnIndex(Settings.NameValueTable.NAME));
                s = s + " : " + c.getString(c.getColumnIndex(Settings.NameValueTable.VALUE));
                aa.add(s);
            }while(c.moveToNext()==true);
        }
        c.close();
        lv = (ListView)findViewById(R.id.ListView);
        lv.setAdapter(aa);
    }
}

0 件のコメント:

コメントを投稿