Android関連のことを調べてみた2023年07月18日

Android関連のことを調べてみた2023年07月18日

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 = false

fun 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 プロジェクト
– マルチモジュールを

元記事を表示

Android 10から13までのメディアファイルへのアクセス

# 経緯
Androidアプリで久しぶりに画像・動画・音声などのメディアファイルへのアクセスを実装する機会があり、かなり昔と変わったなと感じたので整理してみます。
主に[対象範囲別ストレージ](https://developer.android.com/training/data-storage?hl=ja#scoped-storage)が実装されたAndroid 10以降からが大きな変更かと思いますので、Android 10以降のお話をまとめます。

結局今どうやって実装すれば良いのかを早く知りたい!という方は[こちら](#実装)からご覧ください。

# Android10から13までのメディアファイルアクセスに関する変更点

## Android 10 (APIレベル 29)
Android 10で[対象範囲別ストレージ](https://developer.android.com/training/data-storage?hl=ja#scoped-storage)が実装されました。
メディアファイルに限った話を端的にまとめると、**システム側でアプリと各メディアファイルが紐付け

元記事を表示

ElixirDesktopでスマホアプリを作る – Phoenix1.7のアプリを起動

こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop + Phoenix1.7のスマホアプリをWindows11 + WSL2で動かす手順をまとめたいと思います。

———————————————

なお、本記事は2023/7/13開催[ElixirMobile#3:DBも内蔵したElixirDesktopスマホアプリ開発ハンズオン](https://fukuokaex.connpass.com/event/283648/)のイベントレポート(前半)を兼ねています。

——ハンズオンの様子(前半)はこちらから——

↓ ~27:03までが本記事のハンズオン動画です。

———————————————

■「ElixirDesktopでスマホアプリを作る」シリーズの

元記事を表示

Android、DatePickerDialogで日付、TimePickerDialogで時間の選択

# Androidで日付の選択、時間の選択
アプリで日付を入力するEditTextを作成する機会があったって、手入力もダルいので、DatePickerDialogで日付、TimePickerDialogで時間の選択できるようなサンプルを作ってみました。よくある、こんなやつでね。

以下のQiita記事を参考にさせていただきました。ActivityからDatePickerDialog、TimePickerDialogが呼ばれる場合は、このサンプルの通りでよいですが、Fr

元記事を表示

FlowとStateFlowとstateIn()

# Flow (-> MutableStateFlow) -> StateFlow
UseCaseでFlowを作って、ViewModelでStateFlowにして、Screenで表示する方法を学習しようと思います。

結論は、「UseCaseのFlowをそのままstateIn()で流すのはよろしくない。」でした。

## 改造前のソース
APIリポジトリ
“`kotlin
fun getAreaFlow(): Flow> {
return flow> {
val response = forecastApi.getArea()
if (response.isSuccessful) {
emit(Future.Success(value = response.body()!!))
} else {
throw HttpException(response)
}
}.catch

元記事を表示

家事履歴管理アプリ概要

# 目次
1. 要件
1. 画面イメージ
2. 環境

## アプリ要件
* 目的
* 家事の実施履歴を記録する。
* 背景
* 我が家では1日当たり家事を1個行うルールになっています。
* その記録のためのアプリです。
* 家事の貯金が可能で、3個家事を行えば翌日、翌々日は家事が免除されます。
* 7月18日に家事3個やると、貯金が3貯まり、日付が変わるタイミングで1個消費され、19、20日に何もやらないと7月21日には家事をやる義務が発生します。
* 借金も可能とします。

| | 17日 | 18日 | 19日 | 20日 | 21日 |
|:-:|:-:|:-:|:-:|:-:|:-:|
| 実施した家事の個数 | 1 | 3 | 0 | 0 | 1 |
| 貯金 | 0 | 2 | 1 | 0 | 0 |

* 画面構成
* 家事履歴一覧画面
* メンバー一覧画面
* 家事実施登録画面
* 家事履歴一覧画面要件
* 貯金行
* 1行ごとに家事の

元記事を表示

Androidでのコルーチンに関するベストプラクティスを学ぶ

# coroutineのベストプラクティス
GoogleのAndroidDevelopersサイトにあるKotlinコルーチンのベストプラクティスを元に自分のソースを見直してみました。

:::note info
元記事はこちらです
[Android でのコルーチンに関するベスト プラクティス](https://developer.android.com/kotlin/coroutines/coroutines-best-practices?hl=ja)
:::

## ディスパッチャを挿入する
:::note info
元記事はこちらです
[Android でのコルーチンに関するベスト プラクティス – ディスパッチャを挿入する](https://developer.android.com/kotlin/coroutines/coroutines-best-practices?hl=ja#inject-dispatchers)
:::
まとめると「suspendとかflowとかを作成するときに、「Dispatchers.IO」をハードコードするとテストしづらいよ」ということらしい。確

元記事を表示

Maestroは本当に最もシンプルで効果的なのか

# Maestroって何?

サンフランシスコにあるmobile.dev incが作ったモバイル向けUIテストフレームワークです
対応プラットフォームは iOS, Android, ReactNative, Flutter
公式の説明によると

> Maestroは、最もシンプルで効果的なモバイルUIテストフレームワークです。
(原文をDeepL訳)

とあり、「最もシンプルで効果的」と言い切ってるところに興味を持ちました

テストシナリオはyamlでかきます
公式Exampleがわかりやすかったので、イメージとしてのせておきます

startDestinationに引数を指定できない

# Compose Navigation と Activity遷移

– 別Activityで表示したい画面が複数存在する
– 別Activityでも複数画面の切り替えは Compose Navigation で実装する
– 画面には引数を渡したい

ところが `NavHost`の startDestination には引数込みのパスを指定できないため、特別な対応が必要。

今回は startDestination で指定した画面に引数を渡す実装を考えます

[実装の詳細・完全なコードはGitHubを参照してください](https://github.com/Seo-4d696b75/compose-navigation-sample)

:::note warn
他にも解決策は考えられます
– そもそもActivityを別に分けない
– Activityに載せる画面をひとつに限定して`NavHost`を使わない
– 引数をHiltで渡す
:::

# 画面と引数のサンプル

以下のような2つの画面・引数を考えます。

“`kotlin
sealed interface ResultA

元記事を表示

Flutterパッケージ(simple joystick)を初めて作成&公開してみた。

# どんなものを作成したのか?
– ゲームなどによくあるJoyStickを作成しました。
### こんな感じ
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351982/e51607cd-4617-ab60-c50a-e4cd970155a4.gif)

# なぜ作成したか
– Flutterをやり始めて少し経ったので一つくらいパッケージを公開したかった。
– 類似するものもあったが、シンプルなものが見つからなかった。
– Animationの勉強がしたかった。

## よかったら使ってください!!
## バグ、issueなどありましたらGithubにどんどん追加してください:clap:

https://pub.dev/packages/simple_joystick
https://github.com/NaokiNishizawa/simple_joystick

元記事を表示

OTHERカテゴリの最新記事