Androidアプリ開発~カメラアプリ編2~
異世界ゴリラー新里です。
前回に続き、Androidのカメラアプリを作成していこうと思います。
今回作るアプリは「だれでも作れるような簡単なアプリ」を目指すので、Intentを使用して、撮影自体を既存のカメラアプリに任せる方法となります。
今回の記事でやる事は大きく3つ!
1.AndroidManifest.xmlへパーミッションを追加する。
2.MainActivity.javaに既存のカメラアプリをIntentで呼び出す処理を追加する。
3.MainActivity.javaに既存のカメラアプリから撮影結果を受け取る処理を追加する。
です。
早速、1つ1つやってみましょう。
コードも載せていますので、コピペで作れちゃいますよ!
AndroidManifest.xmlへパーミッションを追加する
Androidアプリから端末のカメラを使用する為には、AndroidManifest.xmlにパーミッションを宣言しておく必要があります。画面左側のプロジェクトから、AndroidManifest.xmlをダブルクリックして開き、下記の「// 追加」となっている行を追加しましょう。
<uses-permission android:name="android.permission.CAMER"/> // 追加 ・・・ <application android:allowBackup="true"
ここでは細かい説明はしませんが、カメラを使う際に必要な「おまじない」だと思っておいて下さい。
MainActivity.javaに既存のカメラアプリをIntentで呼び出す処理を追加する
次に、既存のカメラアプリを起動させるコードを追加します。
その際に、任意のコードを渡しておく事で、撮影結果を受け取った際に、自分がリクエストした結果であるかを確認する事ができます。
import android.content.Intent; // 追加 import android.provider.MediaStore; // 追加 ・・・ private final static int REQUEST_CAMERA = 714; // 追加 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 追加 if (intent.resolveActivity(getPackageManager()) != null) { // 追加 startActivityForResult(intent, REQUEST_CAMERA); // 追加 } // 追加 }
「REQUEST_CAMERA = 714」が任意のコードの宣言です。
714とした理由は、この記事が7/14に掲載される為です(笑)
そして、onCreate関数に追加した部分が、Intentを使い既存のカメラアプリを呼び出す部分です。「startActivityForResult()」の第二引数に、先程宣言した任意のコードを渡しています。
MainActivity.javaに既存のカメラアプリから撮影結果を受け取る処理を追加する
最後にIntentで起動した既存のカメラアプリが撮影した結果を受け取る処理を追加します。
Intent起動時の「startActivityForResult()」の第二引数に渡した「REQUEST_CAMERA」を使い、自分の出したリクエストに対する結果である事も確認します。
@Override protected void onCreate(Bundle savedInstanceState) { ・・・ } @Override // 追加 protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 追加 super.onActivityResult(requestCode, resultCode, data); // 追加 // リクエストコードがREQUEST_CAMERAであるか確認 // 追加 if (requestCode == REQUEST_CAMERA) { // 追加 if( data.getExtras() != null){ // 追加 // dataから画像を取り出す // 追加 } // 追加 } // 追加 } // 追加
「onActivityResult」関数は、Intentからの戻り(今回だと撮影結果)を受け取る関数です。
オーバーライド(@Overrideを関数の1行前に付けてあげる)する事で使える様になります。そして、「if (requestCode == REQUEST_CAMERA) 」の部分が、自分の出したリクエストに対する結果であるかの確認を行っている処理です。「requestCode」は関数の引数として渡ってくるもので、REQUEST_CAMERAを宣言した際の値(今回だと714ですね)と同じ値が入っていれば、自分が出したリクエストの結果という事になります。
まとめ
今回はカメラ起動~撮影した結果を受け取る処理までを実装しました。
この時点でスマホにアプリをインストールし、起動するとカメラが起動する事の確認までは出来ます。
ただし、撮影結果を保存する処理はまだありませんので、撮影しても何も残りません(笑)
それでも、簡易的なカメラアプリの作成なら、僅か数行でカメラが使える様になる事は分かって頂けたのではないでしょうか?
今時は誰でも簡単にスマホアプリを作れる時代なんだなって考えると、良い時代になったなぁ~って思いますよね(笑)
といった感じで今回はここまで。
次回は、撮影結果を保存する処理を追加します。お楽しみに!