« 01.29 FB関西オフ会(新年会@大阪) | ココ | 02.06 ハッカソンに初参加 »

2011年2月 5日

画像を送信するIntentを起動させる(Android)   このエントリーを含むはてなブックマーク 


(実機(EXPERIA)をスクリーンキャプチャすると、全体的に何か青っぽいね)

QRコードを生成するAndroidアプリですが、まだまだ完成を見ない。(笑 単にかなりスローペースなだけなんやけど…。で、作ってるアプリにはできあがったQRコードを外部のアプリにエクスポートする機能を付けるべく実装してて、最初、以下のようなコードで外部インテントの起動を行っていた。



Intent intent = new Intent(Intent.ACTION_SEND, null);
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_STREAM, image);  // PNG形式データが入ったbyte[]を渡す
intent.putExtra(Intent.EXTRA_TEXT, text);     // テキスト(EXTRA_TEXTを起動したIntentが受け取る場合)
startActivity(Intent.createChooser(intent, this.getText(R.string.button_export)));

エミュレーターでは、SMSのメッセージアプリしかないようで、テストをしようにもアプリの選択画面にはならず直接SMSアプリが開いてしまう。しかも、画像が添付されてほしいのに添付されない。何が問題かが分からないから、結局実機で試さざるを得ないことに。エミュレーターにFBアプリとか好きなアプリをインストールするにはどうしたらええんやろう。

ということで、実機でもやってみたんやけど、アプリの選択画面になっていろんなアプリを選べるようになったものの画像の添付はされなかった(Facebookアプリを選択)。

改めて調査を進めていくと、Send an Image, ACTION_SEND(ref. Android Forums)で、Intent.FLAG_GRANT_READ_URI_PERMISSIONが必要っぽいことを知り、そしてIntent.ACTION_SENDIntent.EXTRA_STREAMの説明をもう一度読み直してみたら…byte[]を引数で取るオーバーロードがあるのに、Uriでないとダメなようなことが書いてある。ヤラレタ。というわけで書き換え(sms_bodyはおまけ)。

Intent intent = new Intent(Intent.ACTION_SEND, null);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);    // ファイルを読み込む権限を与える
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(path));
intent.putExtra(Intent.EXTRA_TEXT, text);    // テキスト(EXTRA_TEXTを起動したIntentが受け取る場合)
intent.putExtra("sms_body", text);           // 起動するIntentがSMSの場合のメッセージ本文
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent, this.getText(R.string.button_export)));

このようにコードを変えることで、無事、Exportボタンから別のIntent(↓の場合はFacebookアプリ)へ画像を渡すことができた。

By ただ at 23:36 カテゴリー ; プログラミング単語帳 , プログラミングとか

« 01.29 FB関西オフ会(新年会@大阪) | 02月の記事 | 02.06 ハッカソンに初参加 »




トラックバック

このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/1713

このリストは、次のエントリーを参照しています: 画像を送信するIntentを起動させる(Android):

» Android/Dev2 from OKiTama Wiki! (PukiWiki/TrackBack 0.3)
通信 URL: タイトル: コメント: ...

トラックバック時刻: 2012年7月18日 21:54