- 1. SharedPreferencesを自前で難読化するのはもう古い?これからはEncryptedSharedPrefenrecesを使おう
- 2. NFCタグ×MacroDroid×Switch Botで機器を制御
- 3. [Android] ViewModelのRepositoryをHiltでDI
- 4. 【flutter】 エラー対応
- 5. 先頭から7bitが年、4ビットが月、残り5ビットが日 (Elixir)
- 6. [Jetpack Compose] Jetpack Compose Beta!
- 7. RoomでMigration
- 8. FlutterからCloud Firestoreのデータ取得 & データ書き込み
- 9. 続・CameraX でカメラを一時停止する方法
- 10. Pepper SDK入門(24) TopicとTopicStatusでTopicファイルをまな板の鯉化する
- 11. AndroidStudio 「Image Asset」の使い方
- 12. Koinで動的な引数の解決
- 13. DatePickerDialogとSQLite
- 14. 【Android】RecyclerView+RadioButtonの作成
- 15. React nativeでios/androidから発信する方法
- 16. Kotlin, LiveData, coroutine なんかを使って初めてのAndroidアプリを作る(14)TargetAPIを29に上げる
- 17. android studio Opencv manager package was not found! の対処法
- 18. Android Studio エミュレータがオフラインなってる問題の解決法
- 19. GooglePlayアプリ申請でRejectされた時にやったこと(2021年)
- 20. YUV420_888のBitmap化
SharedPreferencesを自前で難読化するのはもう古い?これからはEncryptedSharedPrefenrecesを使おう
## EncryptedSharedPreferencesとは
Android Developersのサイトにある通り、「SharedPreferencesのKeyとValueを暗号化する実装」を提供するものです。
([Android Developers](https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences)公式サイトより引用)
>An implementation of SharedPreferences that encrypts keys and values.今までのgetSharedPreferences()などで使用していたAPIの使い勝手はそのままに、暗号化する機能を提供してくれるので、手軽にセキュリティを高めることができます。
## 動作条件
・プロジェクトのminSdkVersionが23以上であることこれはandroidx.securityのライブラリのminSdkVersionが「23」に指定されているためです。
NFCタグ×MacroDroid×Switch Botで機器を制御
# はじめに
日頃よくSwitch Botを使用して快適に機器の制御をしています。
Switch BotはHubを使用することで、音声インターフェースなどと組み合わせて使用することも多いと思いますが、私はあまり好きではないのでアプリから制御をしています。
ただ、その方法だとまずアプリを毎回開く必要があります。加えて、一定期間でアプリとサーバとのセッションが切れるため、ログインをし直す必要があります。TV、エアコン、照明のON/OFFなどの頻繁に行う制御だと少々使いにくいところがありました。
そこでNFCタグで制御する方法があることを知ったので、試してみることにしました。# 使用したもの
* Switch Bot機器,Hub
* IFTTT
* NFC Tools
* MacroDroid
* Android スマホ端末
* NFCタグ# 試したこと
まずiPhoneユーザの方であればショートカットがあるのでそちらでレシピを作成すればすぐにできるらしいのですが、Androidではそれができず、別の手段で設定しなければなりません。。
そんなのIFTTTでいいじゃないかと思われた方
[Android] ViewModelのRepositoryをHiltでDI
# 前置き
RepositoryをHiltでDIするサンプルコードが少なくてちょっと苦戦したので、メモも兼ねて記事にしようと思いました。今回はKotlinで説明しますが、Javaでも可能です。まず最初に、RepositoryをDIする必要性について説明させてください。
(ソースコードだけ見たい人はマウスのコロコロを2回転半くらいしてください。)## RepositoryをDIする必要性
結論から言うと、やるに越したことはないですが目的がなければやらなくても良いかなと思います。### Repositoryとは
まず、Repositoryパターンについてですが、以下の図のような構成となっています。
![repository](https://developer.android.com/topic/libraries/architecture/images/final-architecture.png?hl=ja)RepositoryはローカルDB/WebAPIへのアクセスをViewModelから隠蔽する役割を持ちます。
これにより、ViewModelはRepositoryに
【flutter】 エラー対応
よくイシューに上がっていますが、自分自身が忘れなように投稿しておきます。
#エラー内容
プラグインにFlutterおよびDartgaが存在しているのに下記エラーが発生するときの対処方法。flutter doctor
“`
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 1.22.2, on Mac OS X 10.15.7 19H2, locale en-LK)
[✓] Android toolchain – develop for Android devices (Android SDK version 29.0.3)
[✓] Xcode – develop for iOS and macOS (Xcode 12.0.1)
[!] Android Studio (version 4.1)
✗ Flutter plugin not installed; this adds Flutter specific functionality.
先頭から7bitが年、4ビットが月、残り5ビットが日 (Elixir)
# はじめに
– [Elixir](https://elixir-lang.org/)楽しんでいますか:bangbang::bangbang::bangbang:
– [Android](https://developer.android.com/?hl=ja)でSuicaの履歴をみるというものを作ってみました
– 「先頭から7bitが年、4ビットが月、残り5ビットが日」、「とある2バイトが残高、ただしリトルエンディアン」こういった処理って地味にけっこうたいへんではないでしょうか
– [Elixir](https://elixir-lang.org/)ならパターンマッチですっきり書けますのでご紹介します
– 2021/2/27に開催する[autoracex #12](https://autoracex.connpass.com/event/205985/)というもくもく会の成果とします![Screenshot_20210226-200730.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808
[Jetpack Compose] Jetpack Compose Beta!
– https://android-developers.googleblog.com/2021/02/announcing-jetpack-compose-beta.html
## What’s In Beta
– ? Coroutines support
– ? Accessibility support for Talkback – support for other technologies will be in Stable
– ? Easy to use Animations, with a completely new API since alpha.
– Interoperability with Views
– Material UI Components, all with @Sampled code
– Lazy Lists – Jetpack Compose’s take on RecyclerView
– DSL-based Constraint Layout
– Modifiers
– Testing
– Theming and Graphics, w
RoomでMigration
# 検証環境
この記事の内容は、以下の環境で検証しています。
* Java:open jdk 1.8.0_152
* Kotlin 1.3.61
* Android Studio 3.5.3
* CompileSdkVersion:29# はじめに
Androidでデータベースを扱う際、Android Jetpackに含まれているRoomを使うことにより、標準APIで実装するより簡潔に実装が出来ます。
しかし、アプリを更新していくうちにテーブルの列を変更したり、テーブルを追加したりします。
その様な更新(マイグレーション)方法について説明した記事になっています。# DBの変更内容
この記事では数の様に、列の追加とテーブルの追加を行います。
※列やテーブルに特段の意味は有りません。あくまで一例と捉えてください。![Migration_er_diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99960/1baa4ecd-4e9d-5175-3eef-38ef47ad1d6f.png)
FlutterからCloud Firestoreのデータ取得 & データ書き込み
## はじめに
Flutterを使って試しに何かネイティブアプリを作ろうと考えていた時、バックエンドの構成で迷ったため、最近流行っている`Cloud Firestore` を使ってみることにした。
そもそもFirebase自体の利用が初めてだったので、まずは簡単な読み書きのテストをしてみた。その時の内容をメモ。## 実施環境
– Ubuntu 18.04LTS(GCP上)
– Flutter 1.22.6
– Dart 2.10.5
– Android Studio 4.1.2
– VScode 1.53.0
## 手順
1.FlutterアプリにFirebaseを追加
2.Firebaseに接続するためFlutter側に設定
3.Cloud Firestoreにデータ書き込み
4.Cloud Firestoreからのデータ取得※事前準備として以下が完了している前提!
・Flutter のサンプルアプリが起動できる状態までのセットアップ。
・Firebaseのプロジェクト作成。## 1.FlutterアプリにFirebaseを追加
まず、Firebaseコ
続・CameraX でカメラを一時停止する方法
# 概要
[CameraX でカメラを一時停止する方法](https://qiita.com/inuko/items/869bbb8b39138bd7c41c)の続きとなります。# 前回の課題
androidx.camera:camera-core:1.0.0-alpha05 までは onPreviewOutputUpdateListener を使ってカメラの映像を一時停止・再開することができた。
以降のバージョンでは、onPreviewOutputUpdateListener が廃止され、一時停止・再開させる方法を検討した結果、暗転せずに一時停止から再開する方法が見つからず困っていた。## 検証環境
camerax-core:1.1.0-rc01# 今回試したもの
[カスタムの LifecycleOwner の実装](https://developer.android.com/topic/libraries/architecture/lifecycle?hl=ja#implementing-lco)CameraX は下記のコードでライフサイクルに合わせた処理を自動で
Pepper SDK入門(24) TopicとTopicStatusでTopicファイルをまな板の鯉化する
#¿What is Topic❓
今回の記事で取り扱うTopicとは、QiChatbotのための会話内容が記述されているものです。
ユーザとPepper間の言葉によるやりとりを定義しています。#TopicにはStatusがある
Qichatbotは複数のTopicでビルドできます。ファウルズの話[^1]についてのTopic、スキージャンプ・ペアの話についてのTopicなどです。
ファウルズの話をしている時はファウルズのTopicにフォーカスが当たっており、スキージャンプ・ペアの話をしている時はスキージャンプ・ペアのTopicにフォーカスが当たっています。フォーカスされているTopicは基本的に、最後の応答を返したTopicです。getFocusで、今フォーカスされているTopicを取得することもできます。
[^1]: ここでは円城塔の『オブ・ザ・ベースボール』に登場する、人が降ってくる町の意。バットで落ちてくる人を打ち返します。TopicStatusは、そうしたTopicファイルの有効・無効を設定できる値クラスです。
“`
fouls.top
u:(野球) 野球最高!!
`
AndroidStudio 「Image Asset」の使い方
#Image Assetの使い方について
###Image Assetは、Androidアプリを開発する上で、簡単にデバイス上に表示するアイコンを作成できるAndroidStudioの機能です。
使い方についてまとめてみました。まず、Image Assetのウインドウの立ち上げですが、プロジェクトウインドウ上で右クリックします。
メニューの「New」をポイントして、その中から「Image Asset」を選びます。
![スクリーンショット 2021-02-24 22.46.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794916/183f8276-2cbf-6532-d620-0c1b99cc319e.png)そうすると、「Configure Image Asset」と書かれたImage Assetのウインドウが立ち上がります。
![スクリーンショット 2021-02-24 22.53.51.png](https://qiita-image-store.s3.ap-northeast-1.
Koinで動的な引数の解決
KoinでのDI時、パラメータを動的に変更する方法の紹介です。
Daggerに慣れている人向けに解説しますと、Injectする引数を可変にしたい場合、Daggerでは`AssistedInject`を使うことになると思います。
これをKoinでどうやるか、という話になります。Koinについてはこちらから。
– https://insert-koin.io/docs/quickstart/android# パラメータ宣言
公式的には以下のドキュメントで紹介されています。
– https://insert-koin.io/docs/reference/koin-core/definitions#declaring-injection-parametersこれを実際に書いて、多少複雑な使い方を紹介していきます。
## module定義
例として、Fragmentに引数としてIDを渡し、それをViewModelの引数にまで引っ張りたいときを考えます。
viewModelが以下の様に可変の引数としてIDを、Injectする予定の引数としてUseCaseを一個取りたいとします。
DatePickerDialogとSQLite
DatePickerDialogを用いた日付取得とSQLiteへの連携について
GitHubを見にきてください。
【Android】RecyclerView+RadioButtonの作成
RadioGroupを使用せずに作成します。# Mainレイアウト作成
RecyclerViewの配置“`activity_main.xml
React nativeでios/androidから発信する方法 ##React nativeでios/androidから発信する方法
React nativeでios/androidから発信する方法を調べる機会がありましたので、調べた情報をここにまとめておこうと思います。
##参考にしたサイト
検索しましたが、今現在でQiitaで記載されている記事を見つけることができず、こちらの記事を中心に参考にしました。
[React Nativeで電話をかける方法](https://www.it-swarm.jp.net/ja/react-native/react-native%E3%81%A7%E9%9B%BB%E8%A9%B1%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/805783300/)そこで2パターンの発信方法がありましたので、以下に記載します
##発信機能の構築 パターン①:Linkingを用いる方法
Linkingを用いて電話をかけます
まずは実際のコード例を以下に記載します。“`react:CallActivity.jsx
import { Linking } f
Kotlin, LiveData, coroutine なんかを使って初めてのAndroidアプリを作る(14)TargetAPIを29に上げる
[前回の記事から](https://qiita.com/kasa_le/items/fa7ebaeb9b496a0e68c2)だいぶ空いてしまった間に、Android Q(10)はおろかPie(11)までがリリースされてしまいました。
今回は、2020/11/1以降、アップデートするアプリが対応を必須とされているTargetAPI=29とする対応を、既存のプロジェクトに対して行っていきます。
Androidアプリは、1年ごとにTargetAPIレベルを上げなさいとGoogleからお達しが出ています。
守らないと、アプリを新規リリースまたは更新版のリリースが出来ません。ロードマップはこの辺りで確認できますが、アップデートに関してはだいたい毎年11月以降適用されると考えていればいいかと思います。
[Google Play の対象 API レベルの要件を満たす](https://developer.android.com/distribute/best-practices/develop/target-sdk?hl=ja)2021/02/09現在、Target30への対応期限(2
android studio Opencv manager package was not found! の対処法
## 概要
android アプリにおいてOpencvを用いており、
このようなエラーがメッセージが出ていました。git にはgoogle play store よりダウンロードするように書かれていましたが、
リンクに飛んでみるとリンクがなくなっており、どうしたものかと考えていました。## 解決策
Opencv-android-sdkを公式からダウンロード
そしてadbコマンドにて手動でapkを端末にインストールします。“`
adb devices
“`
をすることで、現在デバッグ作業をしているデバイスが見えるはず。これが確認できたら、
Opencv-android-sdk/apk に移動し、
“`
adb -sinstall OpenCV_3.2.0_Manager_3.20_arm64-v8a.apk
“`にて解決しました。
Android Studio エミュレータがオフラインなってる問題の解決法
#エミュレータがオフラインに・・・
![スクリーンショット 2021-02-23 17.48.14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/d5fcd776-0338-314e-c414-072a10aa4049.jpeg)
ある日、突然Android Studioのエミュレータがオフラインになっていました。。。オフライン専用のアプリを開発しているのなら構いませんが、、通信環境が必要なアプリの場合は非常に困ります:sweat:
#解決法
絶対にこの方法で治る!とは言えませんが、、**あくまで「僕はこの方法で治った!!」という参考程度に。**※Macの場合となりますが、参考リンクにWindowsの場合もあります!!
##DNSを追加
`システム環境設定>ネットワーク>詳細>DNS`を開く
![スクリーンショット 2021-02-23 18.02.14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com
GooglePlayアプリ申請でRejectされた時にやったこと(2021年)
Androidアプリを作った!早速GooglePlayで公開しよう!
と思って申請してからというもの、合計6回ほどRejectを繰り返し、のべ2ヶ月ほどかかってしまいました
これからアプリを作る方の参考になればと思います# 今回リリースしたアプリ
* 年齢制限なし、広告なし、アプリ内課金なし
* バックグラウンド位置情報、アクティビティにアクセスする
* 配布対象は日本のみというアプリで申請してみました
アプリが使う機能が多くなるほどRejectされやすくなるだろうなとは思います# Reject理由
一連の流れでRejectされたのは下記3つの要因です
特に**位置情報のバックグラウンド取得に絡めてRejectされることがほとんど**でした
最近では厳しくなってるんでしょうね### Unclear feature description
バックグラウンドで位置情報にアクセスが必要な機能を特定できなかった### Prominent disclosure not found
目立つ開示が見つからなかった### Invalid privacy policy
プライバシ
YUV420_888のBitmap化
## CameraXつかってみた
とりあえず、最低限の利用のドキュメントで簡単にプレビューのデータが取れそうなのでやってみた。
とはいえ、取得できるImageデータはBitmapにすることすら標準的には存在していないぽい。
まあ、YUVのままもろもろ処理もいいですが、PreviewViewじゃなくてImageViewでプレビュー出してみたいからBitmap化しよう。
で、いろいろネットの海をさまよったが、とってもわかりにくかったのでまとめた。
## YUV420_888のこと
YUVそのものの詳細は説明しません。
Yが輝度でUVがカラー座標という映像情報のデジタル化手法という感じ。YUV420は輝度はすべてのピクセルに対応した量があり、UVは近傍4ピクセルに一つのセットがあるそうです。
で、後ろの888はおそらくそれぞれ8bitってことかと。## ImageProxyのこと
CameraXで受け取るImageProxyにどういう風に情報が格納されているのかはドキュメントを見つけられなかったのでここに今回得た情報を残すわけです。
PlanesというのがYUV各バッ