2011年9月19日月曜日

むむむ!createChooser()

むむむ!createChooser()

androidのプログラミングを行っていると、変だなと思うことがある。
ただし、変だと思うのは私だけであって、私が変であるという可能性を否定することはできない。

IntentクラスにcreateChooserメソッドがある。
public static Intent createChooser (Intent target, CharSequence title)

これは、共有コマンドを実行する時に、起動できる複数のアプリの中から、お好みの1個のアプリを選択する画面を表示するメソッドである。
必須のメソッドでは無い。

startActivity()には対応しているが、startService()には対応していない。

もし、このメソッドを使わなければ、デフォルトの画面が表示されるだけである。このデフォルト画面には「常にこのアプリを起動する」オプションボタンがある。

このメソッドを使うメリットは、次の2点である。
1 第二引数の文字列を、画面のタイトルに設定できることである。
2 「常にこのアプリを起動する」オプションボタンが表示されなくなる。

次のように書く。
    Intent i, i2;
    i = new Intent();
    i.setAction(Intent.ACTION_SEND);
    i.setType("text/plain");
    i.putExtra(Intent.EXTRA_TEXT, "InfiniteIntent");
    i2 = Intent.createChooser(i, "選択してください");
    try{
        startActivity(i2);
    }
    catch(ActivityNotFoundException e){
    }

仕掛けが大袈裟な割には、タイトル文字列を変更するだけなのか?。などという疑問を持つのは果たして私だけだろうか。

選択してください
1:私も同感である。
2:設計をミスしたように見えるな
3:そんな疑問を持つのはアンタだけや!
4:このような仕掛けにすることが技術的に妥当である。
5:不満があるなら自分で拡張しろ!
6:むむむ!

1 件のコメント:

  1. こんにちは。
    1:私も強く同感
    します。
    これが存在する意味が解らず、悩んだり検索したり結構な時間を無駄にしてしまいました。。
    これを見てしまったのも、さらに疑問を膨らませ。。
    http://ascii.jp/elem/000/000/542/542800/index-3.html
    しっかり「コンテンツを選択させる」とか。。
    個人サイトなどではなく、相応のメジャーサイト(?)で堂々と間違いを書かれると、悩む自分が変なのか?と悩みますね。
    おっしゃるとおり私も、Android APIには奇妙な仕様が多いと思います。

    返信削除