2011年11月4日金曜日

本体設定の画面を表示する

本体設定の画面を表示する

本体設定の画面を表示するには、Settingsを使う。SettingsをIntentで使えば、「本体設定」コマンドをクリックした時に表示される画面を表示させることができる。

Settingsの基本的な使い方
    Intent it;
    it = new Intent(Settings.ACTION_APPLICATION_SETTINGS);
    try{
        startActivity(it);
    }
    catch(ActivityNotFoundException e){
        Log.e(TAG, "ActivityNotFoundException");
    }

様々なACTION_*について
上記の例ではSettings.ACTION_APPLICATION_SETTINGSを使ったが、他にも様々なACTION_がある。このACTION_*に関する留意点は次のとおりである。
  1. platformによっては実行できないものがある。
  2. platformを満たしていても、実行できない場合がある。
このため、Intentの発行に際しては、例外処理を施しておく必要がある。

Settingsの記事内容について
実機を操作してみると分かるが、実機では表示される画面があるにも関わらず、その画面を呼び出すACTIONがSettingsに掲載されていない場合がある。
例えば、端末のメーカーが独自に実装した画面などである。また、Settingsには動かないACTIONが記載されていることもある。
Settingsに掲載されていないACTION情報、又は正確なACTION情報を取得する方法は次のとおりである。
なお、この方法は、ddmsのLog欄でわかるAndroid端末の動作を参考にした。
  1. ACTION情報調査用のプログラムを作成し、デバッグモードで実行させる。
  2. DDMSを使い、端末利用者が画面を切り替えた時点における、各種Intentの発行のログを確認する。
  3. そのログに書かれてあるとおり、本番用のプログラムに書く。
この手順の詳細は下記のとおりである。

正確なACTION情報で本体設定画面を呼び出す
1 調査用プログラム作成
次のプログラムを作成しデバッグモードで実行する。すると、「設定」画面が表示される。この「設定」画面を操作して、調べたい画面を表示させる。
public class SettingsActivity extends Activity{
    final String TAG = "me";
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent it;
        it = new Intent(Settings.ACTION_SETTINGS);
        try{
            startActivity(it);
        }
        catch(ActivityNotFoundException e){
            Log.e(TAG, "ActivityNotFoundException");
        }
    }
}

2 DDMSでログを見る
端末操作者が、例えば、「音声入出力」>「テキスト読み上げの設定」をクリックすると、ログには次のような趣旨の内容が表示される。
Starting: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.VoiceInputOutputSettings }
Starting: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.TextToSpeechSettings }
この情報を基に、プログラミングをする。

3 本番用プログラム作成
上記のログ情報を基に、下記のようにExplicit Intentを発行する。VoiceInputOutputSettings画面を経由せず、いきなりTextToSpeechSettings画面を表示するため、端末利用者からすれば便利である。
public class SettingsActivity extends Activity{
    final String TAG = "me";
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent it;
        it = new Intent();
        it.setClassName("com.android.settings", "com.android.settings.TextToSpeechSettings");
        try{
            Log.i(TAG, "startActivity : TextToSpeechSettings");
            startActivity(it);
        }
        catch(ActivityNotFoundException e){
            Log.e(TAG, "ActivityNotFoundException");
        }
    }
}

0 件のコメント:

コメントを投稿