【Android】選択したテキストでWeb検索を実施する際にハマったこと


Androidアプリの開発時Intent.ACTION_WEB_SEARCHを使用して、Web検索を簡単に実装することができます。
典型的なコードは以下のような感じになるかと思います。

CharSequence selectedText = textView.getText()
        .subSequence(textView.getSelectionStart(), textView.getSelectionEnd());
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, selectedText);
startActivity(intent);

しかしこのコード、コンパイルこそ通るものの正常に動作しません。Google検索は起動されるが、選択したテキストによる検索が実行されないまま止まってしまうのです。

なんでかなあ〜?としばらくハマってしまったんですが、原因はintent.putExtraで渡す引数です。
1行目を以下のように修正すれば正常に動作しました。

String selectedText = textView.getText()
        .subSequence(textView.getSelectionStart(), textView.getSelectionEnd())
        .toString();
...

要するにintent.putExtraにはCharSequenceではなくStringを渡さなければならないということです。CharSequenceも渡せるし、String implements CharSequenceなので問題ないと思い込んでました・・・。

関連する記事


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください