- 1. 新しいAndroidランタイムパーミッションのAPIを使ってみる
- 2. adbからスクショを連続で撮ったときに、画像ファイル名に自動で通し番号をつける
- 3. Rxを使ってIllegalStateExceptionを回避する
- 4. 【Android】DataBindingを使ってログインする
- 5. ディスク容量が足りなくなった時
- 6. RxJavaで連続的なAPI呼び出し後のエラー処理方法
- 7. Android 10 搭載の一部端末で ListView の項目を選択できない障害について調べたら……
- 8. flutter_flavor + flutter_flavorizr を使って Flutter の Flavor を設定する
- 9. Google Play Developer ConsoleでのVALIDATE_APP_MESSAGE_MISSING_COUNTRY_PRICESについて
- 10. 【Android】ViewPager2でサイズが変わるカルーセル作成
- 11. 【Android Studio】Number Pickerをループさせないようにする
- 12. [Android]RecyclerViewのアイテムが表示されない?
- 13. 【Android】MaterialDatePickerの色を変更する
- 14. ホロジュール Android アプリを Kotlin で作る(ホロライブの動画配信予定を収集 その4 やっと完成)
- 15. adb: error: stat failed when trying to …を解決する
- 16. jcenter, bintray 廃止で自分のAndroidアプリに対応したことのメモ
- 17. Google Play Console で内部テストを開始時に「予期しないエラーが発生しました。もう一度お試しください」
- 18. 【Flutter】Providerで最低限のDIを行ってテスタブルなコードにリファクタリングする
- 19. Sesame3にAPIがまだないのでAndroidでAPIサーバーを構築する
- 20. 【Xiaomi Redmi 9T】USBデバッグモードにする方法
新しいAndroidランタイムパーミッションのAPIを使ってみる
Android 6.0で導入されたランタイムパーミッションですが、定型文が多い上に結果の受け取りが`onRequestPermissionsResult`のオーバーライドによる非同期処理となるため非常に使いづらく、ややこしくなりがちでした。昔記事を書いていたのがこちら。
https://qiita.com/niusounds/items/f8852534bd3135d89dccそんなランタイムパーミッションのAPIが、`androidx.activity 1.2.0`でより使いやすくシンプルなAPIになりました!
たとえば`startRecordButton`というボタンを押すと端末のマイクから音声入力を録音する処理`startRecording()`が実行されるアプリを作っているとしたら、以下のような感じのコードになります。
“`kotlin
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onC
adbからスクショを連続で撮ったときに、画像ファイル名に自動で通し番号をつける
adbからスクショを連続で撮ったときに、画像ファイル名に自動で通し番号をつけるコマンド。
“`sh
# 準備 最初に一回だけ実行
i=1# スクショ撮影 & 取得
adb shell screencap -p /sdcard/screen_$i.png && adb pull /sdcard/screen_$i.png && i=$(($i+1))
“`## 参考
adb 経由の screenshot の取り方
https://qiita.com/TNaruto/items/b2407f5668e15e42bedd
Rxを使ってIllegalStateExceptionを回避する
## はじめに
[こちらの記事](https://qiita.com/nein37/items/32613e9acd9558566c5e)を参考にさせていただきました。
Androidで非同期処理を実装していると、IllegalStateExceptionというExceptionが発生することがあります。
これは、onSaveInstanceStateより後のタイミングでFragmentTransactionをcommitしていることが原因で発生するものです。
例えば、APIを叩いてそのレスポンスを受けての処理やタイマーで時限式に動く処理など、アプリがバックグランドにある間に処理が走って、ダイアログを表示したり、次のFragmentに遷移したりするケースがこれに相当するかと思います。回避方針の詳細説明は他にも記事がたくさん出てくるのでそちらに譲りますが、簡単に言うと`onPause ~ onResumeの間`でFragmentTransactionをcommitしないようにすればこの問題を回避できます。
この記事ではRxを使って、`onPause以降`に走る処理を`onResume
【Android】DataBindingを使ってログインする
## はじめに
[DataBindingを使ってテキストを動的に変更する](https://qiita.com/kilalabu/items/3cded5e7c560de2ed05c)の応用版として
DataBindingを使ってログイン機能を実装してみた。(ログイン画面後のUIは適当なのでコード割愛)|ログイン成功時|ログイン失敗時|
| —- | —- |
|![login.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/45a624f8-c616-d3e7-04f2-5d1d33ccb4ed.gif)|![validation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/4a4fb2e5-7b48-4780-ad7b-bc0e098a580e.gif)|## 単方向と双方向バインディングの違いをおさえる
### `@{}` :単方向バインディングの特徴
* ViewMod
ディスク容量が足りなくなった時
Dockerを使って開発したりアプリ開発したりしているとギガがすぐに無くなるので自分用のメモ
## 調査&削除方法
### GUIから調査&削除
メニューバーの一番左のAppleのログを押して、
「このMacについて」>「ストレージ」>「管理…」と遷移して、
容量の大きいデータを調査し、適宜削除を実行する### Terminalから調査&削除
ディレクトリの各階層に移動して1GB以上容量を食っているディレクトリを列挙
“`bash
du -sh ./* | grep -E ‘[0-9]+\.?[0-9]+G’
“`だいたいいつも `~/Library` 以下に容量を食っているディレクトリがある(気がする)
### よくやるやつ
不要なDockerのデータを削除
“`bash
docker system prune
“`実行すると、以下のように削除される対象が表示されるので、問題がなければ「y」を押して削除実行
“`
WARNING! This will remove:
– all stopped containers
– all ne
RxJavaで連続的なAPI呼び出し後のエラー処理方法
RxJavaで連続的にAPIを呼び出して発生するエラーを処理するための方法です。
APIを繰り返し呼び出した場合にエラーが発生する場合、Exception処理を行うためonErrorResumeNextを利用できます。
この関数を利用すると、エラーが発生した時に他のObservableが流れ続けるようにできます。
エラーを返すためにonErrorで処理を分離することもできます。実例:
repo.getAuth(“xxx”)
.onErrorResumeNext { Single.error(AuthError(“${it.message}”)) }
.flatMap { repo.getPayment(it.token) }
Android 10 搭載の一部端末で ListView の項目を選択できない障害について調べたら……
# 障害発生
業務で Android アプリの保守をしていたら、Android 10 搭載の一部端末で ListView をタップしてもしばらく反応しないという障害が発生しました。障害が発生し始めたのは、TabActivity を(ようやく) ViewPager2 に置換してから。当該画面は Activity から Fragment に作り替えられました。
以前との違いを調べれば原因が分かるはず、とリーダーから指示されて調べたのですが……
# これは選択できなくて当然なのでは
調べて、原因が判明するまでに、Android Studio のデバッガで Android システムの Java クラス内部まで見る必要がありました。
原因はこうです。
Activity から Fragment に作り替えたことにより、ListView を含む Fragment が ViewPager2により Windows にアタッチしたりデタッチしたりされるようになりました。
ListView の親クラス AbsListView がWindow からデタッチされたときに呼び出される `onD
flutter_flavor + flutter_flavorizr を使って Flutter の Flavor を設定する
Flutter で環境ごとにビルド設定を切り替えるためには、Flavor を設定する必要があります。
[Creating flavors for Flutter – Flutter](https://flutter.dev/docs/deployment/flavors)
ですが調べてみると、Flavor を設定するためには各 OS ごとに手動でそれぞれ設定しなければならないため面倒です。
– [【Flutter】Flavor の設定~build まで(Android 編) – Qiita](https://qiita.com/hiromasa-fun/items/c79c99535f6f1db2a6a9)
– [Flutter で環境ごとにビルド設定を切り替える — iOS 編. モバイルアプリ開発において、環境ごとに設定を変えてビルド・配信することはほぼ必須… | by mono | Flutter ?? | Medium](https://medium.com/flutter-jp/flavor-b952f2d05b5d)もっと楽して Flavor を設定できないか
Google Play Developer ConsoleでのVALIDATE_APP_MESSAGE_MISSING_COUNTRY_PRICESについて
Androidアプリ(有料)のバージョンアップ時、リリースを作成しバイナリをアップロード後、リリースをレビューしたら
VALIDATE_APP_MESSAGE_MISSING_COUNTRY_PRICES
というエラーが発生しました。このエラーは、価格が設定されていない国/地域があると発生します。
解決するにはアプリの価格設定を更新します。商品→アプリの価格設定
を開き「価格を編集」をクリックして、未設定の国/地域欄を入力するか「為替レートを更新」を選べば完了です。
![スクリーンショット 2021-02-16 16.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629259/fffb0012-d57d-da03-30ae-541e1f27ff1f.png)
【Android】ViewPager2でサイズが変わるカルーセル作成
# dp定義
“`dimen.xml
10dp
50dp
60dp
“``offset`: 隣のアイテムを見せる長さ
`margin`: アイテム間の距離
`total_margin`: `offset`+`margin`# レイアウト作成
`ViewPager2`を配置するメインレイアウトの作成。“`activity_main.xml
【Android Studio】Number Pickerをループさせないようにする
NumberPicker(ドラムロールUI)使用時に、ループさせないようにする方法。“wrapSelectorWheel“を“false“にすればOKです。
## 1. レイアウト
“`activity_main.xml
[Android]RecyclerViewのアイテムが表示されない?
#Android開発は始めたばかり
Adapterのオーバーライドメソッドが呼ばれないため表示されないようでした。
#原因はLayoutManager“`xml
app:layoutManager=”androidx.recyclerview.widget.LinearLayoutManager”
“`これを明示的に入れなければいけませんでした。
【Android】MaterialDatePickerの色を変更する
MaterialDatePicker の色を変更したい場合があると思うのでメモ。
ガイドラインは https://material.io/components/date-pickers“`style.xml
“`スタイルの定義が少々長いので style.xml とは別のリソー
ホロジュール Android アプリを Kotlin で作る(ホロライブの動画配信予定を収集 その4 やっと完成)
## はじめに
前回([https://qiita.com/kerobot/items/bd504b0d787de63c364e](https://qiita.com/kerobot/items/bd504b0d787de63c364e))は、Azure VM の Ubuntu の MongoDB から、ホロライブの配信予定や動画情報を取得する Web API を作成し、Azure VM (Ubuntu) + Nginx + gunicorn へ配置しました。
今回は、作成した Web API からホロジュールの配信予定を取得し、表示する Android アプリを Kotlin で開発してみます。
* Web API : ホロライブの配信予定や動画情報を取得(JWT認証あり)
* Kotlin : 今回の Android アプリ開発で初めて利用したプログラミング言語
* Android Studio : 今回の Android アプリ開発で初めて利用した開発環境## 最終的にやりたいこと
ここ最近、毎日のように閲覧している バーチャル YouTuber プロダクション「ホロ
adb: error: stat failed when trying to …を解決する
# adb: error: stat failed when trying to …を解決する
adb pushなどをするときにパーミッションエラーがでます
“`sh
$ adb push test.txt /data/app_flutter/
adb: error: stat failed when trying to push to /data/app_flutter/: Permission denied
“`# 解決方法
“`sh
$ adb root
“`
を実行してから再度コマンドを実行する
jcenter, bintray 廃止で自分のAndroidアプリに対応したことのメモ
[Service End for Bintray, JCenter, GoCenter, and ChartCenter \| JFrog](https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/)
の対応をする。
まずは [【追記:2022年2月1日へ延期】JCenter が2021年5月1日にシャットダウンすることになったので Android アプリエンジニア観点でメモをまとめた \- BattleProgrammerShibata](https://bps-tomoya.hateblo.jp/entry/2021/02/04/184317) でだいたいの状況を把握しよう。
# 影響があるかどうかの確認手順
– [八木さんのツイート](https://twitter.com/sys1yagi/status/1357509730713829378) を参考に確認方法をまとめる
– `build.gradle` の repositories で下記を削除する
Google Play Console で内部テストを開始時に「予期しないエラーが発生しました。もう一度お試しください」
ストア設定などを仮でもいいので設定すると上手くいきました。ちなみにAdaloのアプリをアップロードしたケースです。
よくあるエラーのようで、ブラウザをChromeにしたりキャッシュ削除やシークレットモードでの実施で直るケースもあるようですが、本当にアカウントを作ったばっかりで、ただ内部テストを開始したいときは上記で解決出来るかと思います。
https://groups.google.com/g/android-group-japan/c/Tgw2-7qZ7V0
【Flutter】Providerで最低限のDIを行ってテスタブルなコードにリファクタリングする
[前回の記事](https://qiita.com/tokkun5552/items/ede8460bef4892f48e37)の最後に書きましたが、テストを行う際はclass同士の依存関係が密になっていると、思うようにテストを行うことが出来ません。
これは、ビジネスロジックを記載している部分にDBのインスタンスやFirebaseのインスタンスを持たせてしまうと、初期化処理などが行えないためです。(※シミュレータなどを使って回避することもできるようです)
そこで、今回は前回と同じ[こちら](https://github.com/tokku5552/TODOAppSample-Flutter/tree/v1.1)のサンプルアプリをリファクタリングして、テスタブルなコードに書き換えてみました。### やったこと
– FlutterでのProviderを用いたTodoアプリをリファクタリング
– Providerを使ってDIする
– test用のrepositoryを自作する最終的なコードは[こちら](https://github.com/tokku5552/TODOAppSampl
Sesame3にAPIがまだないのでAndroidでAPIサーバーを構築する
追記:2021/02/16 Postで解錠されない不具合修正したv1.0.1アップしました。お手数ですがアップデートお願いします。
Sesame3使ってますか?
Sesame miniに比べるとめちゃくちゃ高速化して最高です。
けどAPIがまだ用意されてないためDIY好きなかたには物足りないですよね。
3月にはAPIの発表があるらしいですが私は待ちきれないためどうにかしてAPIを用意しました。
今回はご家庭にあるいらなくなったAndroid端末を利用して無理くりAPIサーバーを構築する方法をご紹介します。(2000円ほどで中古で買えるAndroid5以降の端末)
APIサーバーになるSesameBridgeというAndroidアプリを作りました。まずは動いてる動画を
Sesame3の本番稼働開始!
めちゃはや爆速で皆が求めてたこれだよこれがここに。
Jermingさんがゲキ速と言ってたのは伊達じゃない。
子供達も玄関で待たなくなって喜びそう?
【Xiaomi Redmi 9T】USBデバッグモードにする方法
# はじめに
[Xiaomi Redmi 9T](https://amzn.to/3pjIc2s)を買いました。Android Studioに接続して早速開発に活用しようと思います。
少し他機種とは変わっているので手順を残しておきます。# 手順
## 設定アプリを起動するあらかじめホーム画面にある設定アプリを起動します。
![Screenshot_2021-02-14-21-06-02-462_com.miui.home.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42735/8b79ee5a-3420-df05-548c-f39aed5076d4.jpeg)## デバイス情報を選択する
デバイス情報を選択します。
## MI