- 1. 先頭から7bitが年、4ビットが月、残り5ビットが日 (Elixir)
- 2. [Jetpack Compose] Jetpack Compose Beta!
- 3. RoomでMigration
- 4. FlutterからCloud Firestoreのデータ取得 & データ書き込み
- 5. 続・CameraX でカメラを一時停止する方法
- 6. Pepper SDK入門(24) TopicとTopicStatusでTopicファイルをまな板の鯉化する
- 7. AndroidStudio 「Image Asset」の使い方
- 8. Koinで動的な引数の解決
- 9. DatePickerDialogとSQLite
- 10. 【Android】RecyclerView+RadioButtonの作成
- 11. React nativeでios/androidから発信する方法
- 12. Kotlin, LiveData, coroutine なんかを使って初めてのAndroidアプリを作る(14)TargetAPIを29に上げる
- 13. android studio Opencv manager package was not found! の対処法
- 14. Android Studio エミュレータがオフラインなってる問題の解決法
- 15. GooglePlayアプリ申請でRejectされた時にやったこと(2021年)
- 16. YUV420_888のBitmap化
- 17. 【Android Studio】ActivityNotFoundExceptionを解決した話。(命名に気を付ける)
- 18. Smart lock for Password on Androidを実装するときに気をつけるところ
- 19. ビジュアルプログラミングの MIT App Inventor を用いた音の機械学習を利用する Androidアプリ開発【後編:アプリ実装】
- 20. Hilt環境でのDefaultViewModelProviderFactoryの実装
先頭から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各バッ
【Android Studio】ActivityNotFoundExceptionを解決した話。(命名に気を付ける)
#Android で画面遷移ができない
画面を変えたいがどうしてもできない。コードを全部見直したけどできない。
なぜできないのかわからずいろいろ試行錯誤したが、原因は単純だった。エラー:ActivityNotFoundExceptionの原因は、アクティビティの名前をListActivityとしていたことだった。
リストを表示したいからという浅はかかつ単純な理由でこの名前にしたが、じつはこのクラスはandroid.appの下にすでにあった。
Developers->[ListActivity](https://developer.android.com/reference/android/app/ListActivity,”Developers”)###解決法
エラーはおそらく命名のせいで、ListWorkActivityと名前を変えたらちゃんと画面遷移できた。あとは、インテントの引数でListActivityを指定するときにパッケージを指定してもこのエラーは吐かなくなると思われる。
“`java
//名前を変えた場合
Intent intentList = new
Smart lock for Password on Androidを実装するときに気をつけるところ
Smart lock for Password on Android(以下Smart lock)が出たのは2015年です。
当時実装して、これから新しいアプリにSmart lockを追加するときに気をつけるポイントを2つ記載しておきます。
# Clientが変わった
現在は[CredentialsClient](https://developers.google.com/android/reference/com/google/android/gms/auth/api/credentials/CredentialsClient)ですが、以前は[GoogleApiClient](https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient)でした。
どうもGoogleApiClientで保存した情報はCredentialsClientからは取れないようです(違ったら教えて下さい)# 別のアプリの情報を取得する手段が変わった
https://
ビジュアルプログラミングの MIT App Inventor を用いた音の機械学習を利用する Androidアプリ開発【後編:アプリ実装】
## はじめに
この記事は、以下の記事の続きの内容になります。●ビジュアルプログラミングの MIT App Inventor を用いた音の機械学習を利用する Androidアプリ開発【前編:学習モデルの準備】 – Qiita
https://qiita.com/youtoy/items/322fc193700bcc4df566ブロックベースのビジュアルプログラミングを用いて様々な機能を使った Androidアプリを開発できる「[MIT App Inventor(以下、App Inventor と記載)](https://appinventor.mit.edu/)」を使い、音の機械学習を組み込んだ Androidアプリを作る話です。
上記の記事では、Webサイト上で音を録音し、学習モデルを作成&ダウンロードするところまでの話を書きました。今回の内容は、それを使った Androidアプリの開発の話です。
## 完成したアプリが動作している様子
このアプリが完成して動作している様子を以下に掲載します。
ツイートの文章で書いているように、「おはよう・こんにちは・こんばんは」の 3
Hilt環境でのDefaultViewModelProviderFactoryの実装
# 3行まとめ
– `@DefaultActivityViewModelFactory` および`@DefaultFragmentViewModelFactory` のQualifierを利用してマルチバインディングすると、ViewModelProvider.Factoryを指定しない形でViewModelを生成した際に使用される `DefaultViewModelProviderFactory`の実装が可能である。
– `@HiltViewModel` をViewModelに付与すると、ViewModelのパッケージ名をKeyとした`Map型`のオブジェクトグラフが登録される。
– `HiltViewModelFactory`では、`@HiltViewModel`が付いたViewModelに対しては、内部で定義された`HiltViewModelFactory`が使用され、それ以外のViewModelに対しては、`今回指定するViewModelProviderFactory `か` SavedStateViewModelFactory() `が使用