1月20日(木)

AndroidManifest.xml にインテントフィルターを書くのだが

これも悩んだ。

で、調べた結果↓

// × メールの添付ファイルを選ぶためのアプリに入らない
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>

// × メールの添付ファイルを選ぶためのアプリに入らない
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="image/*" />
</intent-filter>

// ○ メールの添付ファイルを選ぶためのアプリに入る
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="image/*" />
</intent-filter>


android.intent.category.OPENABLE が足りなかった。

これで添付ファイルを選ぶアプリに自分のアプリが出るようになった。

試に画像を選んでみると、ファイルは添付されている感じだが、ファイルサイズが1byte …なぜ?

調べます。

1月19日(水)

// × ViewPicのみOK
Intent intent = new Intent();
intent.setAction( Intent.ACTION_VIEW );
intent.setType( "image/jpeg" );
intent.putExtra( Intent.EXTRA_STREAM, Uri.parse( "file://" + filename_ ) );
startActivity( intent );


// × 実行すると強制終了する
Intent intent = new Intent();
intent.setAction( Intent.ACTION_VIEW );
intent.setType( "image/jpeg" );
intent.setData( Uri.parse( "file://" + filename_ ) );
startActivity( intent );


// × 実行しても落ちないが、表示されない
Intent intent = new Intent();
intent.setAction( Intent.ACTION_VIEW );
intent.setData( Uri.parse( "file://" + filename_ ) );
intent.setType( "image/jpeg" );
startActivity( intent );


// ○ 全てのビューワで表示できる
Intent intent = new Intent();
intent.setAction( Intent.ACTION_VIEW );
intent.setDataAndType( Uri.parse( "file://" + filename_ ), "image/jpeg" );
startActivity( intent );


いくつものパターンを試して全てのビューワで画像を表示させることができた。
データとタイプをsetDataAndType で同時に設定してやる必要があることがわかった。
1月18日(火)

画像共有をするために暗黙的インテントを使ってみる。

他のアプリ(ファイルエクスプローラー)から画像を表示を求められたときに

指定された画像を表示するために、まず自分から暗黙的インテントを投げてみることにする。

Intent intent = new Intent();
intent.setAction( Intent.ACTION_VIEW );
intent.setType( "image/jpeg" );
intent.putExtra( Intent.EXTRA_STREAM, Uri.parse( "file://" + filename_ ) );
startActivity(intent);

この方法だと、1つのアプリは画像を表示してくれるが、他のアプリは表示してくれない。

何がマズイのだろうか…。


Intent intent = new Intent();
intent.setAction( Intent.ACTION_SEND );
intent.setType( "image/jpeg" );
intent.putExtra( Intent.EXTRA_STREAM, Uri.parse( "file://" + filename_ ) );
startActivity(intent);

この設定にするとメーラーに添付させることはできた。


また調査することにする。