Android:「共有」に自分のアプリを追加する

2012.07.19.木
技術

お久しぶりです。
常角(つねずみ)です。
2月以来2度目の投稿になります。
前回の投稿は、意外と好評だったそうで、なんだかんだでたくさんの人に見てもらえたかと思うと嬉しいです。

さて、今回のテーマはAndroid。
端末内のファイルのメニュー内の「共有」に、自分の作ったアプリを追加する方法を紹介したいと思います。
要は、画像のビューアとかで「共有」⇒「Twitter」でTwitterにアップロードできるあれです。



やり方は簡単
まず、Manifest.xmlにintent-filterを追加します。

例)

<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/jpeg"/>
<data android:mimeType="image/jpg"/>
<data android:mimeType="image/png"/>
</intent-filter>

 

これで、拡張子「jpeg」「jpg」「png」のファイルの共有欄に、自分のアプリが追加されるようになります。「image/*」で、全ての画像ファイルを対象とできますが、同時に動画ファイルまでも対象になってしまうので、作っているアプリによって、どっちの方法で書くかは決めればいいと思います。
他にも、「text/plain」でテキストファイルを指定できたりしますが、スマホだと、主に画像や動画になると思いますので、とりあえずこれで。

<activity>
<activity-alias>
<service>
<receiver>

受け取り側では、onCreate()に、以下のような記述をすれば、選択された画像のデータを取得することができます。

private Uri imageUri = null;
try{
imageUri = Uri.parse(getIntent().getExtras().get("android.intent.extra.STREAM").toString());
}catch(Exception e){
imageUri = null;
}

 

onCreate()は、画面が表示された時に通る処理なので、普通に起動したなら「imageUri」はNull。共有から起動されたなら、画像の情報が入りますので、「imageUri」がNullかどうかで、どちらで起動したかを判別できます。

Bitmap bmp;

try {
   bmp = Media.getBitmap(getContentResolver(), imageUri);
}catch (FileNotFoundException e) {
   bmp = null;
}

で、取得したデータを、画像データとして取得することができますので、後はこの「bmp」をアップロードするなり、画面に表示するなりの処理ができます。

 

と、こんな感じです。
難しそうに見えますが、やってみると結構簡単ですし、ファイルを選択して何かするアプリには何かと便利です。

さて、2度目にして既にここに載せられそうなネタがつきかけてます。
最近Androidアプリの開発を始めたので、次ぎ書くのはそこで新たに学んだ知識になる・・・と思います。