- 1. RecyclerViewで何も表示されない時に確認すべきこと。
- 2. vol.2/2 APIのGET結果をキャッシュする (FlowChain,例外処理編)
- 3. android java Bluetooth接続テスト用 コード
- 4. 【Flutter】screenutilに対応したGolden Testの実装
- 5. Unity 2021.3.xでAndroid33をビルドできるようにする
- 6. vol.1/2 APIのGET結果をキャッシュする (Room+Hilt導入編)
- 7. SkyWay×Androidでビデオ通話アプリを作成してみた
- 8. Android StudioでYour CPU dose not support VT-x.のエラーを解消する方法
- 9. JetpackComposeでonTextLayoutを使わないAutoSizeTextを作る
- 10. ElixirDesktopでスマホアプリを作る – LiveViewを使用してCRUDの機能を実装する
- 11. JetpackComposeでSpannableテキスト
- 12. TextInputLayoutのスタイル設定
- 13. JetpackCompose+HorizontalPager+Indicator
- 14. JetpackCompose + HorizontalPager
- 15. 【Android】緯度経度から2点の距離を出す【Kotlin】
- 16. 【Android】はじめてのJetpack Composeで時計を表示するアプリを作ってみた
- 17. 【Android】Bluetoothパーミッションまとめ
- 18. IPアドレスを無限に自動で変更する【Android】
- 19. Android のログについて
- 20. Kover 登場前の JaCoCo による Android のローカル単体テストのカバレッジレポート出力は難しかった
RecyclerViewで何も表示されない時に確認すべきこと。
何度もハマるので自分の備忘のために記入。
RecyclerViewに何も表示されない場合、以下の点を確認しましょう。
## RecyclerViewにlayoutManagerを設定する。
layoutManagerに何も設定しないと、何も表示されません。
view Bindingを使用している場合、以下のような感じで設定する。“`XXXActivity.kt
binding.recyclerView.layoutManager = LinearLayoutManager(this)
“`コードで設定する代わりにlayout editorで設定しても良い。
## (表示後にデータ更新している場合) nofityDataSetChanged() を呼ぶ
RecyclerViewAdapterが参照しているデータが変わった場合、表示を更新するためには
notifyDataSetChanged()
などを呼び出す必要がある。
(変更内容によっては行単位の更新を反映するメソッドのほうが適切な場合もあります。)以上
vol.2/2 APIのGET結果をキャッシュする (FlowChain,例外処理編)
# APIのGET結果をキャッシュしたい!
[前回](https://qiita.com/jozuko_dev/items/e1f47bd1a14a138fb51f)Roomの導入を行いました。
今回は、以下の処理をFlowのChainを使って記述していきます。
– 10分経過している時は、[サーバーから取得]->[DB保存]->[結果返却]
– 未経過の場合は、[DBから取得]->[結果返却]## 各処理のFlow
サーバーからの取得と、DBへの保存、DBからの取得は、すべて異なるflowで記述しています。
“`kotlin
// サーバーからの取得
flow> {
val response = forecastApi.getArea()
if (response.isSuccessful) {
emit(Future.Success(value = response.body()!!))
} else {
throw HttpException(response)
}
}
android java Bluetooth接続テスト用 コード
### ■ テスト概要
・Android 10の端末では、socketのconnectがちゃんと機能していたが、Android 11 の端末だと精度がかなり悪くなる。#### 対象テストバージョン
(Bluetooth 2.0)(Bluetooth 3.0)### ■ テスト用ソースコード
“`xml activity_main.xml
【Flutter】screenutilに対応したGolden Testの実装
# はじめに
現在進めているプロジェクトでは画面サイズに合わせてWidgetやフォントサイズを調整できるよう
[flutter_screenutil](https://pub.dev/packages/flutter_screenutil)を導入しています。Widget Test実装時はGolden Testで実装しているのですがその際に詰まったことを備忘録がてら書きます。
# 前提
[flutter_screenutil](https://pub.dev/packages/flutter_screenutil)とは?
Widgetやフォントサイズを動的に変更できる便利なパッケージです。
詳細な説明は省きますが公式を見て初期設定さえすれば簡単に実装することができます。Golden Testについて
Golden Testの詳細は省きますが今回の対応では[goolden_toolkit](https://pub.dev/packages/golden_toolkit)を利用しています。
Flutterではパッケージを導入せずともGolden Testの実装は可能ですが、よりテス
Unity 2021.3.xでAndroid33をビルドできるようにする
## 環境
– Unity 2021.3.9f1(Appleシリコン版)
– Android Studio 2022.2.1 Patch 2
– macOS Ventura 13.4.1(22F82)## エラー
– Androidのリリースビルド(aab)を作成しようとすると、下記のエラーが発生する。
– エラーメッセージの通りで、android 33のSDKがないからインストールして、再起動してね、という内容。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37873/3129bab7-875f-4c30-9703-c0e7a43a4851.png)
“`
Target Android SDK not installedAndroid SDK does not include your Target SDK of 33.
Please use the Android SDK Manager to install your target SDK version. Re
vol.1/2 APIのGET結果をキャッシュする (Room+Hilt導入編)
# APIのGET結果をキャッシュしたい!
天気予報アプリも順調に育ってきました。
「画面を表示」 -> 「APIコール」 -> 「表示」はできましたので、APIコールの回数を減らすべく、10分以内のリクエストならDBを参照する様にしたいと思います。ということで、キャッシュ先をRoomにすべく、導入していきます。
## Room
### 1. gradleの定義
まずは、Roomの依存定義を行います。“`diff_gradle:app/build.gradle
plugins {
id ‘org.jetbrains.kotlin.android’
+ id ‘kotlin-kapt’
id ‘com.google.dagger.hilt.android’
}android {
defaultConfig {
+ kapt {
+ arguments {
+ // ① schema定義を出力しておくと、AutoMigrationできるようになるので
+
SkyWay×Androidでビデオ通話アプリを作成してみた
# はじめに
[Qiitaでイベント](https://qiita.com/official-events/93564ad363199fa7999c)をやっているので、参加するためにSkyWayを使ってみました?♂️
[前の記事](https://qiita.com/nakashimaakio/items/3fddc5b685f50dc48e63)ではJavaScriptで書きましたが、今回はAndroidアプリ化しました。
ドキュメントは[こちら](https://skyway.ntt.com/ja/docs/user-guide/android-sdk/quickstart/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_engineer_festa_2023)から。https://skyway.ntt.com/ja/docs/user-guide/android-sdk/quickstart/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_en
Android StudioでYour CPU dose not support VT-x.のエラーを解消する方法
Intel Macで動作していたAndroid StudioのシミュレーターがM1 Macに切り替えた後、Your CPU dose not support VT-x.というエラーが発生してシミュレーターを立ち上げられなくなった。
調べたところ解決できたのでまとめておこうと思います。### 環境
・ Apple M1 Pro/mac OS Ventura
・ Android Studio Flamingo 2022.2.1### 解決方法
Settings…>System Settings>AndroidSDKのSDK Toolsタブを開き、Android Emulatorのチェックボックスの中がーになっていたのでチェックマークを入れたどうやらAndroid Emulatorが古くなっていたようだったのでチェックを入れて最新版のをインストールしたらシミュレーターで起動できるようになりました
JetpackComposeでonTextLayoutを使わないAutoSizeTextを作る
# JetpackComposeでonTextLayoutを使わないAutoSizeTextを作る
JetpackComposeにautoSizeMaxTextSize,autoSizeMinTextSize,autoSizeStepGranularity,autoSizePresetSizesに対応したTextを作成します。AutoSizeTextの全ソースは[こちら](https://github.com/jozuko/ComposeTutorial/blob/main/app/src/main/java/com/jozu/jetpack/compose/tutorial/screen/composable/AutoSizeText.kt)です。
ご自由にどうぞ。もっと効率のいいやり方あったら、コメント or プルリクいただけると泣いて喜びます。:::note info
経緯
AutoSizeTextを作ってみたというサンプルに多いのが、「onTextLayout」を使用しているものです。
これは、「描画する」->「表示しきれなかったらフォントサイズを小さく
ElixirDesktopでスマホアプリを作る – LiveViewを使用してCRUDの機能を実装する
こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop + Phoenix1.7のスマホアプリをWindows11 + WSL2で動かす手順をまとめたいと思います。———————————————
なお、本記事は2023/7/13開催[ElixirMobile#3:DBも内蔵したElixirDesktopスマホアプリ開発ハンズオン](https://fukuokaex.connpass.com/event/283648/)のイベントレポート(後半)を兼ねています。
——ハンズオンの様子(後半)はこちらから——
↓27:03~以前が前回の記事、以降が本記事のハンズオン動画です
↓「微調整」の部分以降の動画です。
——————————-
JetpackComposeでSpannableテキスト
# Spannable風のTextを作る
![text_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491965/ba2ba372-a14f-82ff-0983-48456b62c07a.png)
この画像の年月日の部分は、1つのTextに対して、複数のスタイルを適用する(Spannable風)ことで実現しています。
以下を参考にしています。:::note info
[1つのテキストに複数のスタイルを設定する(Google Developers)](https://developer.android.com/jetpack/compose/text?hl=ja#multiple-styles)
:::## 一部のフォントサイズを小さくする
“`kotlin
val smallSpanStyle = SpanStyle(fontSize = MaterialTheme.typography.bodySmall.fontSize)
Text(
text
TextInputLayoutのスタイル設定
TextInputLayoutのスタイル設定についてまとめようとしましたが途中で力尽きました。
https://github.com/material-components/material-components-android/blob/master/docs/components/TextField.md を読めばやろうとしていたことがだいたいまとまっていました。
やる気が出たら追記します。### TextInputLayoutを表示するためのレイアウト
|未入力|入力後|
|-|-|
|![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149856/49c276cd-1e04-14d9-209d-01a51d3634ef.png)|![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149856/80507389-7164-5861-8d59-8a262e1c9280.png)|“`xml
JetpackCompose+HorizontalPager+Indicator
# HorizontalPagerにIndicatorをつける
[前回](https://qiita.com/jozuko_dev/items/d025391e37351708a964)、HorizontalPagerを配置しました。これに、インジケーターをつけていきます。
完成イメージはこちらです。
![indicator_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491965/fc57bc90-8a89-9a91-8dc3-eb10335f736a.gif)## データ構造
前回と同じですが、天気予報は、以下のデータ構造をしています。
“`text
Forecast(天気予報)
└ List(地域データ一覧)
├ name(地域名)
├ code(地域コード)
└ overviews(今日と明日とあれば明後日の天気予報)
├ weatherCode(天
JetpackCompose + HorizontalPager
# Pagerを使って天気予報画像を表示しよう
JetpackComposeのPagerを使って、天気予報の画像を表示しようと思います。
## 依存関係の修正
JetpackComposeのPagerは、[バージョン 1.4.0-alpha03](https://developer.android.com/jetpack/androidx/releases/compose-foundation?hl=ja#1.4.0-alpha03)で、[accompanist](https://google.github.io/accompanist/pager/)から本家(androidx.compose.foundation:foundationライブラリ)に統合されました。
なので、まずは、依存関係を更新していきます。ただ、残念なことに、現時点ではJetpackComposeのBOMは、androidx.compose.foundation:foundationを1.3.1までしかサポートしていないので、BOMが使えないため手動で定義していきます。
[BOM とライブラリ バージョン
【Android】緯度経度から2点の距離を出す【Kotlin】
# 実践
Location.distanceBetweenを利用して2点の距離は出します。private fun getDistanceBetween(
latitude1: Double, longitude1: Double,
latitude2: Double, longitude2: Double
): Float {
val results = FloatArray(3)Location.distanceBetween(latitude1, longitude1, latitude2, longitude2, results)
// 0を指定することで2点の距離を返す
return results[0]
}Location.distanceBetweenの引数を上から順に 第一地点の緯度、経度、第二地点の緯度、経度、2点間の距離を詰めるresultsの順で指定します。
resultsではそれぞれ数字を指定して欲しい情報
【Android】はじめてのJetpack Composeで時計を表示するアプリを作ってみた
# はじめに
今回は、ずっと存在は知っていたが使ったことがなかったJetpack Composeでアプリを作ってみました!
余談ですが、自宅のAndroidStudioの開発環境を最近Flamingoに変えて「Empty Activity」で作成したらJetpack Composeのアプリでできることをちょっと前に知りました。(気付くのが遅いですね。。。)
今はまだxmlでの開発が私は多いのですが、今後を考えるとJetpack Composeでの開発も増えていくのではと言うことで触ってみることにしました。# アプリ説明
特別なことはしないでただ時間を表示するアプリです。
フォーマットとしては hh : mm : ss を表示しています。
以下が画像です!
# 実際のコード
次は実際のコードです。今回はFlamin
【Android】Bluetoothパーミッションまとめ
# はじめに
最近Bluetooth関連の機能を実装しているプロジェクトを触ったのですが、Bluetoothに関するパーミッションってたくさんありますよね。
上記に関するパーミッションがそれぞれどういう役割を担っているのか備忘録的に残しておこうと思います。# BLUETOOTH
Android12以下の端末でBluetooth機能を使用する場合はまずこのパーミッションを追加する必要があります。
このパーミッションは、接続のリクエスト、接続の受け入れ、データの転送など、Bluetooth通信を実行するために必要です。# BLUETOOTH_ADMIN
Android12以下の端末で機器の検出を開始したり Bluetooth設定を操作したりする場合はBLUETOOTHパーミッションと合わせて追加する必要があります。# BLUETOOTH_PRIVILEGED
アプリがユーザーの承諾なしにBluetoothデバイスをペアリングしたり、電話帳へのアクセスやメッセージへのアクセスを許可または禁止したりできるようにするパーミッションです。
※サードパーティ製のアプリケーションでは使用で
IPアドレスを無限に自動で変更する【Android】
# adbをインストール
https://developer.android.com/studio/command-line/adb?hl=ja
# USBデバッグを有効化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/6b1e2d18-9228-8768-ddf5-32aa983a724b.png)
# USBテザリングでパソコンとスマホを接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/adf03f97-5a5b-a5c2-2be3-5ae27e47f999.png)
# IPアドレスを自動で変更する
シェルスクリプトで自動化できます
“`powershell
# wifiはオフにしておいてください
.\adb.exe shell svc wifi disable
# IPアドレスを自動で変更する
.\adb.exe shell
Android のログについて
Android の[ログ](https://developer.android.com/reference/android/util/Log)についての記事になります。
ログは、動作確認や不具合解析には有効ですが、セキュリティやパフォーマンスの観点からリリース時には出力内容を検討する必要があります。
私もリリース時は、DEBUG レベル以下のログは出力しないようにしています。
“`kotlin:Logger.kt
object Logger {
private const val TAG = “myApp”
private const val DEBUG = falsefun e(msg: String) { Log.e(TAG, msg) }
fun w(msg: String) { Log.w(TAG, msg) }
fun i(msg: String) { Log.i(TAG, msg) }
fun d(msg: String) { if (DEBUG) { Log.d(TAG, msg) } }
fun
Kover 登場前の JaCoCo による Android のローカル単体テストのカバレッジレポート出力は難しかった
この記事は「[Kover でらくらく! Android のカバレッジレポート出力](https://qiita.com/tfandkusu/items/a6cf3dd42bb699986245)」の補足となります。
> Gradle でカバレッジレポートを出力する設定方法は、Codecov 公式で JaCoCo Plugin を使う方法が紹介されています。しかし Android のローカル単体テストを対象とする場合の設定が難解です。近年、Kotlin 公式のプラグインである Kover がリリースされ、それを使用することで、 最短2行のシンプルな記述でカバレッジレポートの出力を設定できるようになりました。
と言いましたが、[JaCoCo Plugin](https://docs.gradle.org/current/userguide/jacoco_plugin.html) はどのくらい難解だったのかを解説します。
# 開発スタイルおよび環境
この記事では元の記事と同様の開発スタイルおよび環境を想定しています。
– Android プロジェクト
– マルチモジュールを