インテントの使い方は、new Intent()でインスタンスを作成し、setAction()なりputExtra()なりで渡したいデータや情報を設定し、最後にstartActivity(intent)ってするだけです。
Webアプリで言うところの<form>タグにわりと近いですが、最大の特徴として<form action>の行き先をきっちりと指定しなくてよい、というものがあります。
Intent.setAction(Intent.ACTION_DIAL)とすると、Android側で勝手に、AndroidManifest.xmlでIntent.ACTION_DIALに結びつけられているアプリケーションを探し出してきてくれます。
Windowsの拡張子関連付けのようなもので、拡張子が"ACTION_DIAL"のアプリを起動してくれという指定をするだけで、具体的にどのアプリを起動するかまでは記入しません。
最初はデフォルトのダイアラが起動すると思われますが、別のダイアラアプリをインストールしていればそちらを起動するようにもできるということです。
勿論宛先をきっちり指定したインテントも可能で、その場合はコンストラクタなりIntent.setClassName()なりで宛先パスを具体的に指定します。
さて、Intent.putExtra()でインテントに色々なデータを詰め込むことができるのですが、対応しているのがプリミティブ型とかParcelableとかCharSequenceとか、まあ要するにテキストデータを突っ込むのが前提になっています。
また、画像を扱うBitmapあたりはParcelableを実装しているのでそのまま突っ込めます。
が、適当なファイルなんかをそのまま突っ込みてーとか思ってもそのままではできません。
ではどうすればいいかというと、バイナリをストリーム化してバイト列にして投入、という面倒な手続きを取らないといけません。
送信側
いや、なんか手段はあるとは思うんだけどやり方がわかりません。
Webアプリで言うところの<form>タグにわりと近いですが、最大の特徴として<form action>の行き先をきっちりと指定しなくてよい、というものがあります。
Intent.setAction(Intent.ACTION_DIAL)とすると、Android側で勝手に、AndroidManifest.xmlでIntent.ACTION_DIALに結びつけられているアプリケーションを探し出してきてくれます。
Windowsの拡張子関連付けのようなもので、拡張子が"ACTION_DIAL"のアプリを起動してくれという指定をするだけで、具体的にどのアプリを起動するかまでは記入しません。
最初はデフォルトのダイアラが起動すると思われますが、別のダイアラアプリをインストールしていればそちらを起動するようにもできるということです。
勿論宛先をきっちり指定したインテントも可能で、その場合はコンストラクタなりIntent.setClassName()なりで宛先パスを具体的に指定します。
さて、Intent.putExtra()でインテントに色々なデータを詰め込むことができるのですが、対応しているのがプリミティブ型とかParcelableとかCharSequenceとか、まあ要するにテキストデータを突っ込むのが前提になっています。
intent.putExtra("title", "タイトル"); intent.putExtra("value", 1);などは問題なく行えます。
また、画像を扱うBitmapあたりはParcelableを実装しているのでそのまま突っ込めます。
が、適当なファイルなんかをそのまま突っ込みてーとか思ってもそのままではできません。
ではどうすればいいかというと、バイナリをストリーム化してバイト列にして投入、という面倒な手続きを取らないといけません。
送信側
//ファイルをストリーム化してインテントに突っ込む InputStream input = getResources().openRawResource(R.raw.hoge); try { byte[] buffer = new byte[8192]; int actual_read = 0; while ((actual_read = input.read(buffer)) != -1) { intent.putExtra("hogehoge", buffer); } } catch (Exception e) { e.printStackTrace(); }受信側
//インテントからストリームを取得 byte[] buffer = intent.getByteArrayExtra("hogehoge"); ByteArrayInputStream input = new ByteArrayInputStream(buffer);なんかもっとこうどうにかならないものですかね。
いや、なんか手段はあるとは思うんだけどやり方がわかりません。
PR
トラックバック
トラックバックURL: