忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/21 19:11 |
Android2.2 インテントでバイナリデータを渡す
インテントの使い方は、new Intent()でインスタンスを作成し、setAction()なりputExtra()なりで渡したいデータや情報を設定し、最後にstartActivity(intent)ってするだけです。
Webアプリで言うところの<form>タグにわりと近いですが、最大の特徴として<form action>の行き先をきっちりと指定しなくてよい、というものがあります。
Intent.setAction(Intent.ACTION_DIAL)とすると、Android側で勝手に、AndroidManifest.xmlIntent.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


2010/09/27 22:31 | Comments(0) | TrackBack(0) | Android

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<2ちゃんねる複数板 荒らし被害用避難板 | HOME | 買ったものリスト 2010/09/26>>
忍者ブログ[PR]