ラベル カメラアプリ の投稿を表示しています。 すべての投稿を表示
ラベル カメラアプリ の投稿を表示しています。 すべての投稿を表示

2016年12月21日水曜日

Googleから警告もらっちった:Androidのカメラアプリが「個人情報または機密情報に関わる権限」だった件 #android #privacy

はふー。今年ももう終わりますねー。

実は先ほど、Googleさんからお手紙もらいました。
件名はなんと、

「[要対応] Google Play デベロッパー ポリシー違反に関わる警告」


・・・。
「要対応」だってか。「警告」だってか。
なんだか穏やかじゃないですね。
どうやら、先日公開したアプリ「ロケッパ!」についてらしいんですが、はて。

別にユーザー情報集めてるわけでもないし・・・。ただ写真撮ってるだけだもの。
端末の電話帳とかセンシティブなデータにアクセスしてるわけでもない。

で、よくよくメールを読んでみますと・・・ああ、そういうことね。

当該のアプリは、個人情報または機密情報に関わる権限 (カメラ、マイク、アカウント、連絡先、スマートフォンなど) またはユーザー データを要求していますが、有効なプライバシー ポリシーが確認できませんでした。
・・・カメラも「個人情報または機密情報」に関わる権限なのか。まあ確かに、機密情報を写すこともあるわな。
で、これに対する罰則が、なかなか厳しい。
ご対応いただけない場合、Play ストアからの削除も含め、お客様のアプリの公開を制限する措置を取らせていただきます。
オウフ・・・。
これ、今あるカメラアプリ、全部当てはまるよな・・・。

まあ削除されてはかなわないので、さっそく対処しましたけど。
ネットでプライバシーポリシーのテンプレ探して、ちょちょっと変更。
自分のサイトにプライバシーポリシーのページ追加して(こういう時Concrete5は便利だ)、
さらにGoogle Play Developer Consoleの「ストア掲載情報」にプライバシーポリシーページのURLを追加。

さて、あとはアプリ自体にも、プライバシーポリシーのURLを明示せなあかんのだが・・・。
もうすでに画面はデザイン的にいっぱいで、URLなんか載せる場所は無い。
仕方が無いので、onCreateで呼ばれるinitメソッドに、Toastを追加。
ページのURLを表示させるようにする。String.xmlすら使わずに、ソースに直接書いた。てへ。
ちょっとダサすぎる対応だけど、まあ、今は時間が無いから仕方ない。

ま、とりあえずは急場をしのぎました。
実はその間、あちゃこちゃアホなトラブルありまして。

公開前にデバッグしようとしたらAndroid Studioに「アップデートしろ」と怒られたり、
アップデートしようとしたらMacのストレージが足りなかったり、
仕方が無いからゴミ箱を空にしようとしたら、ストレージの空きが4MB(!)しかなくてOSが固まって、空にできなかったり・・・
ああ。

Kazumichi Suzukiさん(@nekogesaku)が投稿した写真 -


トラブルはひとたび起きると「わーーーー!!」っと群がってくるものですな、と今日も遠い目で思った1日でした。
あー疲れた。

***
そんなわけで機能はひとっつも追加してませんがとりあえずバージョンアップしました(笑)。

買ってください買ってください買ってください。

#Android + #OpenStreetMap + Camera
地図つき無音カメラ「ロケッパ!」
メモ付きなのでライフログにピッタリ!
https://goo.gl/UWKvyJ

無料版(広告有):
https://goo.gl/iNQL16



2016年10月28日金曜日

不変じゃあかんやん:Android SDK Camera2で撮影した画像にテキストを合成する #android #java

んはーあ。
眠い。
みーなさーん、元気ですーかー。

・・・今日は備忘録です。100%備忘録です。Androidです。アプリです。
(ブログの構成も何もあったもんじゃない書き方・・・)

いやね、せっかく来月末にABC 2016 Autumnに行くんなら、自作のアプリの一つや二つ、引っさげてったらカッコイイかなー、なんて思い立ちまして。
半ば放置してたカメラアプリをちょこちょこいじってたわけですが。

相変わらず、Camera2、難しいわ・・・。
何日も試行錯誤して、先日、やっと写真が保存できるようになりましたさ。

で、今日は、撮影した画像に文字列を埋め込んでみようかと。

撮影した画像に文字列を合成すること自体は、以前開発したアプリで経験済み。
でも、あの時は「android.hardware.Camera」使ってた。

さて、「android.hardware.camera2」使ったらどうすればいいんだべか。
ヾ(。>﹏<。)ノ


どっかでカメラから取得した画像をBitmapにして、
それをCanvasに描画して、
drawText使ってやればいいのは、同じだと思うけど・・・。

で、四苦八苦してなんとかできたのがこちら。

ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
                @Override
                public void onImageAvailable(ImageReader reader) {
                    Image image = null;
                    try {
                        image = reader.acquireLatestImage();
                        ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                        byte[] bytes = new byte[buffer.capacity()];
                        buffer.get(bytes);

                        BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
                        bitmapFactoryOptions.inMutable = true;
                        Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, bitmapFactoryOptions);
                        Paint paint_text = new Paint();
                        paint.setColor(Color.argb(100, 125,0, 34));
                        paint_text.setColor(Color.argb(255, 0, 0, 0));
                        paint_text.setTextSize(50);
                        Canvas bitmapCanvas = new Canvas(bmp);
                        bitmapCanvas.drawText("Text string", 500, 500, paint_text);
                        bitmapCanvas.save();

                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                        bmp.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
                        byte[] bytes_toSave = byteArrayOutputStream.toByteArray();
                        saveImage(bytes_toSave);

                    } catch (FileNotFoundException e){
                        e.printStackTrace();
                    } catch (IOException e){
                        e.printStackTrace();
                    } finally {
                        if(image != null){
                            image.close();
                        }
                    }
                }
                private void saveImage(byte[] bytes) throws IOException {
                    OutputStream outputStream = null;
                    try {
                        outputStream = new FileOutputStream(mFile);
                        outputStream.write(bytes);
                    } finally {
                        if(outputStream != null){
                            outputStream.close();
                        }
                    }
                }
            };

bitmapを作る時に、不変にしてなかったところで、しばらく蹴つまずいておりました。
このへんですね。


BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
bitmapFactoryOptions.inMutable = true;
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, bitmapFactoryOptions);

上の一行目で、BitmapFactoryに渡すオプションの箱を用意。
二行目、「.inMutable」で、ビットマップを変更可能にするオプションを定義。
で、BitmapFactoryでBitmap作るときに、定義したオプション、「bitmapFactoryOptions」を渡してあげましたさ。

ほいっとな。

んー。適当だけど、とーりあえず、写真に文字列のっかりました。

こんだけのことだけど、久しぶりにソースいじったら苦労したー。
しかも、手持ちのUSBケーブルがどれもこれも断線してて、Macと実機を接続できるケーブルを探すのがこれまた一苦労。

最近、いらん苦労ばかりしてる気がする・・・


位置とか書式とかは、また明日にしよう。
もう寝るー。


2016年6月29日水曜日

そりゃまあ動くわな。:android.hardware.camera2使ってみた

こんばんは。眠い。こんばんは。

ふと、Androidで新しいカメラアプリを開発しようと思い立ちまして。
以前開発したカメラアプリは、実はこのあいだ非推奨(deprecated)になった「android.hardware.Camera」を使っていまして。

代わりに「android.hardware.camera2」を使え、とのことらしいんですが。

・・・非推奨、と言ってもまだ使えるしー、「camera2」が使えるデバイスはまだまだ限られているらしいしー。
ちょっと様子を見てたんですが・・・。

ちょっと芋焼酎の水割りで気が大きくなったところで、
「よっしゃCamera2やってみたろうかい」と相成りました。
どうせ「2」がついただけじゃろ、がははは、ってノリで(水割り一杯目)。

・・・。
あかんかった。ノリでなんとかなるもんじゃなかった。
なんか、CameraとCamera2は、じぇんじぇん違うらしい。
ググると色々サンプルが出てくるのですが、どれもこれも結構難しい。

素面でないと無理そうだ。
うーん。どうすべ。コポポポポ(水割り二杯目)。

でもまあ、せっかく検索に時間を費やしたのだから、何もできずに寝てしまうのは惜しい。
と言うより、このまま寝たら、きっと明日は気になって気になって仕事にならない。

・・・仕方がないので、Googleさんのサンプルを導入してみることにしました。
サンプルはこちらのGitHubに全ソースがありましたよ。

得てして「サンプル」というのは、そのまま使っても、ほぼ動かないもんですが。
今回のサンプルは、ちょーっと手直しをしただけで、すぐに使えるようになりました。
さっすがGoogleさまですね。いひひ(水割り三杯目)。

さて、とにかく使える、トイうコトが分かったところで、明日kらまt、サンプルにちょっとずつ手をkわえていきまsh

・・・。
さすがにそろそろ寝ようかな。お休みなさい。