スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android]TextViewにリンクを設定して他のActivityを設定する方法

TextViewに表示されているテキストからURL、@user、#hashなどの文字列を抽出してリンクにし、他のActivityを起動したい。(いわゆるTwitterクライアント)

この辺を参考に(特に2つ目)した。
http://developer.android.com/intl/ja/resources/articles/wikinotes-linkify.html
http://developer.android.com/intl/ja/resources/articles/wikinotes-intents.html
http://developer.android.com/intl/ja/guide/topics/intents/intents-filters.html

1. リンク作成
まず、Linkifyクラスで、該当の文字列を抜き出してリンクにする。
httpで始まる単純なURLは、そのままの文字列で暗黙のIntentを発行。
@userや#hashなどは、Linkify.TransformFilterを使って、content://で始まるURIに変換する。
URIのサーバー名に当たる部分(Authorityという)は、パッケージ名などを元にユニークな名前にする。
 例:net.fchiba.sampleapp など。
パスに当たる部分は、アプリごとに適当に設計する(RESTな感じで)。
 例: /user/(id) とか。

2. ContentResolverの作成
URIからMIMEタイプを求めるクラスを作成する。ContentResolverを継承したクラスを作成し、getTypeをオーバーロードする。サンプルを参考にして、getTypeのみ実装。
MIMEタイプは、image/jpegなど決められているもの以外の場合、vndで始まりユニークになるように決める。
 例: @id なら vnd.net.fchiba.sampleapp.twitter/user、
    #hash なら vnd.net.fchiba.sampleapp.twitter/search とか
作ったクラスをAndroidManifest.xmlに登録。
 <provider android:name="(クラス名)" android:authorities="net.fchiba.sampleapps" />

3. 処理を受け取るActivityを作成
1.で発行されるのは暗黙のintentなので、intent-filterで受け取る必要がある。
発行されるActionは android.intent.action.VIEW。2.で決めたMIMEタイプで受け取るActivityを振り分ける。
ユーザーを処理する Activityなら、
 <intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="vnd.net.fchiba.sampleapp.twitter/user" />
 </intent-filter>
など。


TODO
・ユーザー名やハッシュタグを抜き出す正規表現を洗練させる。
・リンククリック時にメニューなどを表示させる方法を調べる。シングルクリックでデフォルトアクション、ロングクリックでメニュー選択がいいよね。android.intent.category.ALTERNATIVEなどが怪しげ。
スポンサーサイト

コメント

非公開コメント

プロフィール

fchiba

Author:fchiba
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。