LoginSignup
1
3

More than 5 years have passed since last update.

「Android版」カメラ写真を保存するサンプル

Posted at

今回紹介しているのは以下のものです、同じくキーをコピーすれば、すぐ動くものです。5分で試せるもの、是非!

画像1

概要

ニフティクラウドmobile backendって何??

スマートフォンアプリのバックエンド機能(プッシュ通知・データストア・会員管理・ファイルストア・SNS連携・位置情報検索・スクリプト)が開発不要、しかも基本無料(注1)で使えるクラウドサービス!今回はデータストアを体験します

注1:詳しくはこちらをご覧ください

画像2

動作環境

  • Windows 7 Professional
  • Android Studio 1.5
  • Android ver 4x,5x
    • このサンプルアプリは、端末のカメラを使用するため、実機が必要です

※上記内容で動作確認をしています

手順

1. ニフティクラウドmobile backendの会員登録とログイン→アプリ作成

  • 上記リンクから会員登録(無料)をします登録ができたらログインをすると下図のように「アプリの新規作成」画面が出るのでアプリを作成します

画像3

  • アプリ作成されると下図のような画面になります
  • この2種類のAPIキー(アプリケーションキーとクライアントキー)は先ほどインポートしたAndroidStudioで作成するAndroidアプリにニフティクラウドmobile backendの紐付けるため、あとで使います

画像4

  • 動作確認後に写真(画像)が保存される場所も確認しておきましょう

画像5

2. GitHubからサンプルプロジェクトのダウンロード

  • プロジェクトのGithubページから「Clone or download」>「Download ZIP」をクリックします
  • プロジェクトを解凍します

3. AndroidStudioでアプリを起動

  • AndroidStudioを開き、解凍したプロジェクトを選択します

画像6

  • プロジェクトを開きます

画像7

4. APIキーの設定

画像8

  • それぞれYOUR_APP_KEYYOUR_CLIENT_KEYの部分を書き換えます
    • このとき、ダブルクォーテーション(")を消さないように注意してください!

5. 動作確認

  • アプリが起動したら、①「CAMERA」ボタンをタップして、写真を撮影します
  • 次に、②「保存」ボタンをタップして、保存します(今回はファイル名固定:test.png)
  • 保存された画像が起動画面に表示されます

画像9


画像10

  • 簡単に写真がクラウドに保存できました☆★

解説

サンプルプロジェクトに実装済みの内容のご紹介

SDKのインポートと初期設定

ロジック

  • activity_main.xmlでデザインを作成し、MainActivity.javaにロジックを書いています
  • 写真をクラウドに保存する処理は以下のように記述されます

1)ファイルストアへのアップロード

  • mBaaSのAndroid SDKが提供する、ファイルストア機能を利用する場合はNCMBFileを使用します
  • ファイルストアへのアップロードするには、このクラスが提供するsaveInBackgroundメソッドを利用します
  • saveInBackground()を実施することで、非同期に保存が行われます非同期実施するため、DoneCallBack()を使って、成功・失敗処理を指定します
    • ファイル保存に成功した場合は、ファイルの取得を行います(今回保存したファイル名:test.png)
    • ファイル保存に失敗した場合、アラートで保存失敗を表示します
  • ファイル名を固定しているため、新しくファイル(画像)を保存すると上書きされます

2)アップロードしたファイルを取得

  • ファイルストアに保存したものを取得するには、fetchメソッドを利用します
  • fetchInBackgroundメソッドでの非同期処理も可能です(今回利用)
    • ファイルの取得時には、ファイル名を先に取得する必要があります(今回保存したファイル名:test.png)
    • ファイル取得に成功した場合は、ファイル取得・表示します
    • ファイル取得に失敗した場合、アラートで失敗を表示します

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (data == null || data.getExtras() == null) {
            return;
        } else {
            Bitmap bp = (Bitmap) data.getExtras().get("data");
            //******* NCMB file upload *******
            ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
            bp.compress(Bitmap.CompressFormat.PNG, 0, byteArrayStream);
            byte[] dataByte = byteArrayStream.toByteArray();

            //ACL 読み込み:可 , 書き込み:可
            NCMBAcl acl = new NCMBAcl();
            acl.setPublicReadAccess(true);
            acl.setPublicWriteAccess(true);

            //通信実施
            final NCMBFile file = new NCMBFile("test.png", dataByte, acl);
            file.saveInBackground(new DoneCallback() {
                @Override
                public void done(NCMBException e) {
                    String result;
                    if (e != null) {
                        //保存失敗
                        new AlertDialog.Builder(MainActivity.this)
                                .setTitle("Notification from Nifty")
                                .setMessage("Error:" + e.getMessage())
                                .setPositiveButton("OK", null)
                                .show();
                    } else {
                        //******* NCMB file download *******
                        NCMBFile file = new NCMBFile("test.png");
                        file.fetchInBackground(new FetchFileCallback() {
                            @Override
                            public void done(byte[] dataFetch, NCMBException er) {
                                if (er != null) {
                                    //失敗処理
                                    new AlertDialog.Builder(MainActivity.this)
                                            .setTitle("Notification from Nifty")
                                            .setMessage("Error:" + er.getMessage())
                                            .setPositiveButton("OK", null)
                                            .show();
                                } else {
                                    //成功処理
                                    Bitmap bMap = BitmapFactory.decodeByteArray(dataFetch, 0, dataFetch.length);
                                    iv.setImageBitmap(bMap);
                                }
                            }
                        });


                    }
                }
            });
        }
    }

参考

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3