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

Android関連のことを調べてみた2023年01月04日
目次

AndroidでバックグラウンドでUDP受信を待ち受ける

Androidスマホにおいて、常にUDPパケット受信を待ち受けるバックグラウンドサービスを作成します。
UDPパケットをAndroidのフォアグラウンドサービスとして常に待機状態とし、受信したUDPパケットの内容に応じて、処理をして、また待ち受けます。
できる処理は多くはないですが、今回は、トースト表示とNotification通知をします。

ソースコードもろもろをGitHubに上げておきました。

poruruba/UdpBackgroundService

https://github.com/poruruba/UdpBackgroundService

# フォアグラウンドサービスの立ち上げ

フォアグラウンドサービスの立ち上げには、MainActivityから以下を実行します。

“`java:Android\BackgroundUdpServer\app\src\main\java\jp\or\myhome\sample\backgroundudpserver\MainActivity.java
Intent intent;

元記事を表示

(Android)Composite Build でビルドロジックをまとめる

# はじめに

Android×Gradle×MultiModule 構成において、Compsite Build を使用してビルドロジックを共通化したときのメモです。

# アプリの構成

機能毎の縦割りとアーキテクチャレイヤー毎の横割りを想定しています。
app は全ての feature に依存し、各 feature は core モジュールに依存するあるあるのやつですね。

– app
– feature/feature1
– feature/feature2
– feature/feature3
– core/resource
– core/repository
– core/database
– core/network

# 導入準備

### build-logic ディレクトリを作成

プロジェクトトップに`build-logic`というフォルダを作成します。Android Studio で「New」→「Directory」で作成します。任意の名前で良さそうです。

### build-logic ディレクトリを読み込む

プロジェクトトップレベルの`settin

元記事を表示

【Firebase】コレクショングループを使って、横断的に特定のコレクションのサブコレクションのみを取得する方法

# あるサブコレクションが別のサブコレクションにまたがって存在する場合

次のようなFirestoreのコレクションとドキュメントの関係がある場合を考えます。

“`markdown
– users (collection)
– user-id-1 (document)
– albums (sub collection)
– alubm-id-1 (document)
– songs (sub collection)
– song-id-1 (document)
– song-id-2 (document)
– album-id-2 (document)
– songs (sub collection)
– song-id-3 (document)
– song-id-4 (document)

元記事を表示

[Unity] CV VTuber Exampleのサンプルでビルドまでやってみる。

# 前提

– [[Unity] CV VTuber Exampleのサンプルを動かしてみる](https://qiita.com/na2na/items/571f3bba290ae00718d9)までやってあること。

# 前回との差異

– Unity 2021.3.16f1

# 作業

以下主に備忘録です。

## (必要なら)Unityエディタの追加

今回は説明も兼ねて、必要そうなものをイチから追加していく手を取ります。2021.3.16f1でやっていきます。
前回記事のセットアップまで済ませてあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306146/a7cb4b83-a040-7ac4-afd2-7e34dc30f37e.png)

## Windows向けビルドを試してみる part1

`Build Settings`を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

ScrcpyHub v1.8.0 をリリースしました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/03811928-56c8-49f4-4896-d2e354b54e25.png)

# はじめに

ScrcpyHubはAndroidの画面をミラーリングするためのGUIアプリケーションです。ScrcpyHubは以下のGitHubリポジトリで絶賛開発中ですのでよければコントリュート&スター登録お願いします。

https://github.com/kaleidot725/ScrcpyHub

ScrcpyHubはscrcpyというコマンドツールを利用して作成しております。scrcpyのコントリビュートがScrcpyHubの発展にも繋がりますのでぜひチェックしてみてください。

https://github.com/Genymobile/scrcpy

# ScrcpyHubでできること

ScrcpyHubでは以下の機能をサポートしています。以下の通りScrcpyHubでは複数のAndroid端末の画面ミラーリング、スクリーン録

元記事を表示

【Kotlin】関数に書いてあるUnitとは

# はじめに
プログラミング学習中の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

Kotlinの学習をし始め、ちょっとした学びや驚きもアウトプットしておこうと思い記事にしました?

関数に書いてある(ことがある)`Unit`についてです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/e6bb1b7a-8490-5013-62e2-2b85ce13ffb7.png)

# 結論
関数に戻り値が無い場合に記載するものです。

# Kotlinの関数
Kotlinでは関数を

“`Kotlin
fun 関数名 (仮引数名: 引数の型, …): 戻り値の型 {
//処理
}
“`
といった形で**戻り値の型**も記載します。

ところが関数には戻り値が無い、不要な場合もあると思います。
そういった、戻り値が無い関数の場合に戻り値の型の部分に`Unit`と記載します。

:::note inf

元記事を表示

AMD CPU Ryzen で コマンドラインからAndroid Emulator を実行させる

AMDのRyzenでAndroid StudioのEmulatorを実行させるためにいろいろ試したメモです。

# 環境
CPU:AMD Ryzen 7 4800U with Radeon Graphics 1.80 GHz
OS:Microsoft Windows 11 Home
メモリ:16.0GB

# 結論
コマンドラインからオプションを指定して起動させる。

###### 前提
Emulatorの設定
System Image: x86_64

###### 実行コマンド
このパスで
`C:\Users\XXX\AppData\Local\Android\Sdk\emulator>`

このコマンドを実行する。
`.\emulator -avd (仮想デバイス名) -gpu swiftshader_indirect`

仮想デバイス名は同じパスで以下のコマンドで一覧表示される。[(公式ドキュメント)](https://developer.android.com/studio/run/emulator-commandline?hl=ja)
`.\emulator -list-

元記事を表示

【Android】Firebaseを使っていて、Could not deserialize object…エラーが発生した時の解決方法

# エラーが発生した当時の環境

Firestoreに保存されているドキュメントを取得する際に、`toObject()`を呼び出してドキュメントをデータクラスのインスタンスに変換しようとしました。

その時に使用したのが、以下の内容の`Member`データクラスです。プロパティとして、`String`型や`DocumentReference`型に`Timestamp`型など、Firebaseを使う方にはお馴染みの内容かと思われます。

“`kotlin
data class Member(
val id: String = “”,
val name: String = “”,
val groupRef: DocumentReference,
val imageRef: DocumentReference? = null,
val createdAt: Timestamp = Timestamp(Date()),
)
“`

そして、いつものように取得した`DocumentSnapshot`インスタンスの値に対して`toObject()`を呼び

元記事を表示

[Truth] MapSubject#containsExactlyEntriesIn()とMapSubject#containsAtLeastEntriesIn()の違い

## 概要
ユニットテストを書いていて、Truthの `MapSubject#ontainsExactlyEntriesIn()` と `MapSubject#containsAtLeastEntriesIn()` の違いが分からなかったのでまとめました。

## 環境
“` app/build.gradle
implementation com.google.truth:truth:1.1.3
“`

## メソッドの説明から見る「違い」
それぞれのメソッドコメントを直訳しました。
### MapSubject#containsExactlyEntriesIn()
> Fails if the map does not contain exactly the given set of entries in the given map.
> 与えられたマップに少なくとも与えられたエントリのセットが含まれていない場合、失敗します。

### MapSubject#containsAtLeastEntriesIn()
> Fails if the map does not contai

元記事を表示

[Jetpack Compose] 再コンポジションされているのにUIが更新されない

## 概要
Jetpack Composeを使用して画面を作成した際、コード上は再コンポジションされているのに、端末上のUIが更新されないという事象に遭遇しました。
“` MainActivity.kt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val counterState = remember { mutableStateOf(0) }
Counter(
count = counterState.value,
updateCount = { newCount ->
counterState.value = newCount

元記事を表示

【Android】実質たった3行でCloud Storageに画像をアップロードする方法

# この記事で紹介する内容

今回は、Androidアプリで画像をアップロードする機能を実装したい方向けに、Firebaseを使えば簡単に画像アップロード機能を実装できることを紹介したいと思います。

具体的にいうと、この記事を読めば、**実質たった3行のコード**を書くだけで、画像を含めたファイルのアップロード機能を作成することができるようになります。

この記事を読んだ後に、「なんだ、Firebaseってめっちゃ使いやすいじゃいないか」と思っていただいた方にはFirebaseの公式ドキュメントをご一読いただき、その機能の豊富さとシンプルさに是非驚いていただけると幸いです。

https://firebase.google.com/docs/storage/android/start#kotlin+ktx

# 依存関係を追加する

Cloud Storageライブラリの依存関係を追加します。

そのために、以下の内容をbuild.gradleのdependenciesに追加してください。

“`gradle
implementation platform(‘com.google.

元記事を表示

【Android】JetpackCompose の基本【kotlin】

# はじめに
今回はJetpackComposeの基本的なことを記事にします
自分の中の解釈で書いているので間違っている点もあるかとは思いますが、使いながら慣れていき
間違っていることに気が付いたら直していければな と思います

# 基本
“`
@Composable
“`
上のアノテーションが付けられた関数がコンポーズ可能な関数

“`
@Preview
“`
コンポーズ可能な関数に上のアノテーションを付けてプロジェクトをビルドすることで
Android Studio内でプレビューを表示することができます

“`
@Composable
private fun Hoge(name: String) {
Surface(color = Color.Green) {}

“`
Composeで作られたUIの背景色を変える場合はSurfaceでラップします
Surfaceは色を受け取ることができるので背景色に指定したい色を引数に渡します

SurfaceやTextなどのCompose内の要素は **modifier** という省略可能なパラメータにより親レイアウ

元記事を表示

【Android】Jetpack Composeで、表示させたいURLの画像をImageに渡す方法

# アプリを作っていて・・・

ユーザーが保存した画像を、アイコンとして表示させたいなと思っていました。
ところが、今までアプリの内部で保存されていた画像リソースを参照して表示するくらいの機能しか作ったことがありませんでした。

そこで、どうやったら画像URLをアプリ上で表示できるようになるかを調べたので、今後の自分への忘備録として記しておこうと思います。

今回は執筆時点のバージョンが**2.2.2**の**Coil**ライブラリを使用した場合の解説となりますので、あらかじめご了承ください。

# 画像を読み込むために必要なライブラリのインポート

外部URLに存在する画像を読み取るためには、**Coil**ライブラリが必要になります。

“`gradle
implementation(“io.coil-kt:coil:2.2.2”)
“`

https://coil-kt.github.io/coil/compose/

続いて、Jetpack ComposeにてCoilを使いたいので、次のライブラリをインポートします。

“`gradle
implementation(“i

元記事を表示

Androidのホーム画面にウィジェットを配置しよう

(今年一回目の投稿です)

今回はAndroidのホーム画面に自分カスタムのウィジェットを配置します。
カスタムといっても、自分の好きなWebAPIを呼び出すだけモノのです。
ですが、サーバを立ち上げてWebAPIの呼び出し先での後処理をカスタマイズすれば、なんでもできますよね。
ということで、ウィジェットを配置するAndroidアプリケーションと、WebAPI呼び出しを受け付けるNode.jsサーバの2本立てです。

ソースコードもろもろは以下のGitHubに上げてあります。

poruruba/CustomWidget

https://github.com/poruruba/CustomWidget

# 全体構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/f9278efc-6f24-2878-d212-518d31cb0cf0.png)

ウィジェットのためのAndroidアプリケーションと、WebAPI呼び出しを受け付けるNode.jsサーバの2つからなりま

元記事を表示

[WearOS] Androidアプリ開発との相違点

## :speaker: 今回話すこと
– Androidアプリ開発とWearアプリ開発との相違点について

## :thinking: Androidアプリ開発との相違点
### :ok_woman: 同じところ :ok_woman:
#### AndroidStudioで開発できる
エミュレーターもWearOS端末で実行できるので、実機がなくても実行は出来ます。
ワイヤレスデバックにも対応しています。

AndroidのエミュレーターとWearのエミュレーターを接続することも出来ます。

#### Jetpackライブラリを使用できる
Jetpackライブラリなどが使える点で、Androidエンジニアとしての知識がそのまま活用できます。
そのため、ViewModelやFlow, Hiltなどを用いたAACベースのアーキテクチャを採用できます。
また、UIもViewベースでの書き方とComposeベースの書き方両方あるので、特に変わりはないです。

#### OSのバージョンが対応されている
同じである点か微妙ですが、一応。
AndroidのAPIレベルと対応されています。

元記事を表示

CoroutineDispatcherをHiltでいい感じにDIする

# 概要
CoroutineのCoroutineDispatcherをHiltでDIできるようにした方法です。

# 解決したいこと
まず前提としてCoroutinesをAndroidで使用する際に下記のように実装することが好ましいとされています。
また今回は1と3の問題を解決するためにCoroutineDispatcherをDIする必要性が出てきました。
1. suspend関数はmain-safeな実装にすること
2. suspend関数はcancellableな実装にすること
3. withContextのCoroutineDispatcherはハードコードしないこと

https://developer.android.com/kotlin/coroutines/coroutines-best-practices?hl=ja
## main-safeな実装について
suspend関数はMainスレッドから呼び出されても問題ない(クラッシュしたりフリーズしない)実装にすることが好ましいとされています。
## withContextのCoroutineDispatcherはハードコ

元記事を表示

【Android】未使用リソースをまとめて削除する方法

# はじめに
本日は大晦日ですね、年の瀬となれば大掃除ですが、プロジェクト内のリソース整理できていますか?
歴史の長いプロジェクトであれば人の入れ替わりもあり、その辺りも疎かになりがちだと思いますが、全てサクッと消す方法があるので備忘録的にもまとめておこうと思います。

# まとめて削除する方法
削除する方法は至って簡単です。
AndroidStudioのメニューから Refactor > Remove Unused Resources…を選択する形になります。

上記に沿って選択していくと以下ダイアログが表示されますが、直ぐに消すのが不安な方はプレビューを選択していただければ消す前に削除する対象の一覧が確認できます。

Android の Geofence で気をつけること

もう年末ですが、今年とある機能の開発で戦った Android の Geofence について [Android Advent Calendar 2022](https://qiita.com/advent-calendar/2022/android) に書こうと思います。試しに動かすと動いちゃうんですよね。コイツは。でも少し深く掘って見ると様々な障害点が見つかります。

# Geofence とは

https://developer.android.com/training/location/geofencing?hl=ja

事前に設定した領域からの出入りをイベントとして処理を行うことができます。

:::note info
さらに Google Play 開発者サービスを利用の [Activity Recognition Transition API]( https://developers.google.com/location-context/activity-recognition) を利用すると、行動の様子(歩く・走る・止まる・乗り物)も含めてイベントにすることができます

元記事を表示

【Android】Jetpack Composeで、イメージピッカーを作ってみる【rememberLauncherForActivityResult()編】

# イメージピッカーをJetpack Composeで作ってみたい

なにかしらの登録画面で、ギャラリーから画像を選択して、その選択した画像を登録できるようにしたいと思ったことはありませんか?しかも、Jetpack Composeを使って。

僕はこの問題に、今まさに直面しています。

そこでこの記事では、未来の自分への忘備録として、Jetpack Composeでイメージピッカーを作成する手順を解説しようと思います。

# rememberLauncherForActivityResult()とは

実際に、イメージピッカーの実装に入る前に、あるメソッドについて説明しておかないといけません。
そのメソッドとは、`rememberLauncherForActivityResult()`のことです。

コンポーザブル内で、ファイルを選択したり保存したりする機能を実装したことがある方なら見覚えがあるかもしれません。

公式のドキュメントには次のように書かれています。

> rememberLauncherForActivityResult() API を使用すると、コンポーザブル内のアクテ

元記事を表示

SearchViewでソフトキーボードを非表示にする

AndroidアプリでActionBarにSearchViewを実装する際のソフトキーボードを非表示にする方法は、以下の通りです。
今回は、Fragmentに

## レイアウトファイル
“`menu/search.xml


  • OTHERカテゴリの最新記事