素人のアンドロイドアプリ開発日記

暗黙的Intentのシェアでtwiccaの画像添付時の「メディアを認識できません」と言うエラー

2012.06.15

このエラーは、わからなくて作者の方に聞こうとまで思ったのですが、持ち前の内弁慶を発揮して、twitterでぐちぐち、「仕様と言う事にしよう」とか言ってみたりしてましたが、

twiccaの総ダウンロード数が100万~500万だったので、日本のスマホ(アイフォンを含む)の出荷総数が2000万程度なので。。

もしエラーが発生したならば、

自分のアプリ→twiccaに画像添付→twiccaでエラー

となった場合、どっちが悪者か明白です。

 

僕です。冤罪ってやつです。

 

なので修正をする事を決意しました。

(現状として写真に落書き系のアプリとかは対応してなかったりするので、一概に修正が必須ではないのですが、画像アップだけになってしまうと好きな文言をつぶやかせられないので、その懸念の為だけに修正をしました。)

 

 

ちなみにシェアは

Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "AAAA");
it.putExtra(Intent.EXTRA_TEXT, "HELLO");
it.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://"+_path));
it.setType("image/*");
startActivity(Intent.createChooser(it,"Share"));

上記のような暗黙的Intentといわれる実装の事をいっています。

 

twiccaのページを見るとセキュリティ○○とか書いてあったので、結構大変な事でも発生したのか。。と言う考慮もありつつ。

原因と言うか、アプリによっては問題なく添付できるのですが、自分のでは無理だったので原因を探りました。

 

 

まず、画像の保存に関してというより保存の際に端末への認識をさせる方法がいくつかあります。

MediaScannerConnectionか、メディアスキャンか、ContentResolverです。

特性を言うと、MediaScannerConnectionがその画像をデータベースに入れ込む

メディアスキャンは端末内のメディアを全て再度読み込む、ContentResolverがデータベースに書き込む。ようなものです(ニュアンスです。)

 

で、前者2つだとシェアでtwiccaに画像がはじかれてしまいます。

ContentResolverでも基本的にはじかれるのですが。

 

自分のソースコードを抜粋すると

ContentResolver contentresolver = getContentResolver();
Time mTime = new Time();
mTime.setToNow();
ContentValues contentvalues = new ContentValues(6);
contentvalues.put("_data", AttachName);
contentvalues.put("mime_type", "image/jpeg");
contentvalues.put("title", _title);
contentvalues.put("datetaken", Long.valueOf(mTime.toMillis(false)));
contentvalues.put("description", _title);
Uri _uri =  contentresolver.insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentvalues);

で、登録した際にぽろっとUrlが取得できます。このUriをなげて

Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "HAHAHA");
it.putExtra(Intent.EXTRA_TEXT, "hello");
it.putExtra(Intent.EXTRA_STREAM,_uri);
it.setType("image/*");
startActivity(Intent.createChooser(it,"Share"));

上記のような形式で投げると問題なくtwiccaでも画像を添付できました。

 

facebook twitterに関しては自分で実装できるので、甘えに過ぎないのですが。暗黙的Intentに任せると楽なので。

 

同じカテゴリの記事を紹介します

流れる背景を作るステータスバーの色を好きな色にするカメラの権限の取得をするpush通知の実装を確認をする為に、phpを書くしかないListView GridViewに下部にマージンをあけたい時よくつかうメモListViewの設定split で ドット文字列を、bitmapにするクラスを作ってみた。uriから画像の回転角度を取得するgridviewとlistviewで表示にalphaanimationを使ったら動かないのが存在する問題自分で変数を持つクラスを作ってコピーした時に参照まで渡してしまう問題でかい画像が表示されない。という問題interfaceをandroidで使ってみるフルスクリーンでナビゲーションバーまで消せるパソコンを買ったらする事点滅をさせるスクリプトJsonObjectを扱う時のtry catchが邪魔なのでシンプルにする2chのまとめアプリは気を付けろArrayAdapterの使い方setTimeOutを作るarraylistを並び替えAndroidの勉強で気を付けるべき6つの事staticで変数を持ちまわす時Androidで定規を作る時にサイズを確認してみる。TextureViewがゴミから神になった日ListViewの位置を変更しないで更新する方法animationをxmlで設定するのはアホなようだ。listを作るのがめんどい件について矩形の中の点の存在条件についてScrollViewのScrollToが効かない時Twitterのアプリを暗黙的Intentで狙いうちの巻勉強した内容をクラスにしてみてるText三角形の座標の包括判定をプログラムで実装前回作ったeasingを使って、translateアニメーションにイージングをかける。AndroidのデフォルトのアニメーションがダサいのでEasingをJavascriptから持ってきたmatrixを使って、回転をさせる時に中心点をずらす方法destoryとかで割と実行してるメモリリーク対策AnimationDrawable 動かないTextViewをセンター寄せにする。特定のアプリがインストールされているかを判別する方法surfacevierをaddviewすると、一瞬画面が点滅する件アニメーションで高さを変更listviewで押すとデフォルトで背景に色がつくのを抑止するline-heightをアンドロイドのtextviewで設定をする。listviewの区切り線を消すframelayoutだとmarginが効かない@android2.2アンドロイドのimageviewで背景が透けるという糞仕様を発見ウインドウのサイズを取得する方法decodeResourceは劣化する上に糞遅い。decodeResourceは劣化します。もう一度言います。decodeResourceは劣化します。

カテゴリー:androidアプリTips

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする