外部アプリと連携して画像を選択、取得する2017年01月18日(編集2017年01月18日)TweetAndroidアプリ開発では、外部アプリと連携して画像を取得できます。この記事は、外部アプリと連携して画像を選択、取得する方法を記載した記事です。中級者向けサンプルコードAndroid-Media-Demo外部連携Androidは、外部アプリと連携ができます。外部アプリとの連携には、Intentの機能を使います。利用される外部連携は、画像アプリのメディアデータの取得や、SNS接続です。外部アプリ起動実装サンプルを実装します。このサンプルアプリでは、以下の機能を実装します。「画像を選択する」ボタンをクリックして画像選択可能な外部アプリを立ちあげる。立ち上げた外部アプリで選択したデータを取得する。選択した場合は、ImageViewに画像を表示する。選択しなかった場合は、Toastで「画像が選択されませんでした」とメッセージを表示する。Activityの画像選択ボタンに、画像選択可能な外部アプリを立ちあげる機能を実装します。addCategoryIntent#addCategoryメソッドは、新しいカテゴリをintentに追加します。インテントに追加すると、結果がフィルタリングされて、画像ファイルなどの開くことができるドキュメントのみが表示されます。setTypeIntent#setTypeメソッドは、明示的なMIMEデータタイプを設定します。データタイプのドキュメントのみを表示します。createChooserIntent#createChooserは、起動できる複数のアプリの中から、利用したいアプリを選択する画面を表示するメソッドです。null)第2引数にはタイトルを指定します。nullの場合、タイトルは非表示になります。Frameworkを使用しているので、intentのEXTRA_MIME_TYPESに複数のMIMEタイプを明示的に追加します。types.toArray());ビルド上記のコードの動作を確認してみましょう。画像選択が可能な外部アプリが立ちあがりました。立ち上げた外部アプリで選択したデータを、自分のアプリで取得します。onActivityResultonActivityResultメソッドはstartActivityForResultの結果を受け取ります。データintentを受け取ることができます。Overridesする必要があります。結果がOKでない(RESULT_OKでない)なら、エラーメッセージを表示します。return;}結果がOKの場合は、intentからuriを取得してimageViewにuriを設定します。data.getData();selectedImage.setImageURI(result);あらゆる画像に対応するには、取得したUriに応じたContentProviderの処理が必要です。説明が長くなるのでここでは割愛します。最後に、AndroidManifest.xmlにREAD_EXTERNAL_STORAGEパーミッションを設定します。android:name="android.permission.READ_EXTERNAL_STORAGE"/>ビルド上記のコードの動作を確認してみましょう。ギャラリーで取得した画像を表示ギャラリーで取得した画像が表示されました。パーミッション実装アプリをAndroid6.0以降に対応させる場合は、Permissionの実装が必要です。ギャラリーのアクセスには、READ_EXTERNAL_STORAGEのパーミッションが必要です。}ActivityCompat.checkSelfPermissionメソッドは特定のパーミションが付与されているかどうかをチェックします。許可されている場合はPackageManager.PERMISSION_GRANTEDが返却され、許可されていない場合はPERMISSION_DENIEDが返却されます。許可がない場合は、許可を求める処理が必要です。permissionをリクエストするrequestExternalStoragePermissionメソッドを実装します。}上記のコードの動作を確認してみましょう。権限をリクエスト権限の許可を求めるダイアログが表示されます。Permissionのリクエストの結果はonRequestPermissionsResultメソッドで受け取ります。}onRequestPermissionsResultメソッドは、引数の配列で権限結果を受け取ります。「許可しない」を押した場合は、PackageManager.PERMISSION_GRANTED以外が返却されます。許可しないをクリック「許可」を押した場合は、以下のようになります。許可をクリック外部アプリの選択が可能です。結論Androidアプリの外部アプリ連携実装は、初期の頃と比べるとかなり複雑になっています。実装する場合は、苦労すると思いますが、少しづつ必要な知識を身につけてアプリを作ってみてください。