Android関連のことを調べてみた

Android関連のことを調べてみた
目次

lifecycle 2.7.0についてのメモ

# 概要

lifecycle 2.7.0がリリースされています。
https://developer.android.com/jetpack/androidx/releases/lifecycle#2.7.0

ChatGPTにお願いした更新内容の要約は次の通りです。
1. `TestLifecycleOwner`に、状態変更とLifecycleObserverコールバック完了のためのサスペンド機能`setCurrentState()`が追加されました。
1. LiveData拡張の`map`と`switchMap`は、`distinctUntilChanged`のように振る舞い、LiveDataの値を即座に設定するようになりました。
1. `SavedStateHandle`でカスタムParcelableクラスがプロセスの死後に正しく復元されるよう修正されました。
1. LifecycleObserverに関連するProGuardの保持ルールが削除されました。
1. Jetpack ComposeとFlowで`Lifecycle.Event`と`Lifecycle.State`を観

元記事を表示

【Android】FragmentにComposeViewを乗っける場合は、ViewCompositionStrategyを指定しなければいけない【Jetpack Compose】

# はじめに

無限に忘れてしまうので、戒めの記事を書きます。

公式ドキュメントの[この部分](https://developer.android.com/jetpack/compose/interop/interop-apis?hl=ja#composition-strategy)についてです。

## 本題

FragmentやカスタムViewでComposeViewを使用する場合は、それらのライフサイクルに合わせてCompositionを破棄する必要があります。
それを実現してくれるのが、ViewCompositionStrategyになります。

“`kotlin:公式のサンプル
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
MaterialTheme {
// In Compose world
Text(“Hello Compose!”)
}
}
“`

デフォルトでは

元記事を表示

Flutter でスナックバーが何度も表示されてしまう

こんにちは、普段は Android のアプリエンジニアをしているものです。
最近は Flutter とスマートコントラクトの開発がマイブームです。

ところで突然ですが、皆さんは rebuild に悩んだことはありませんか。
例えば rebuild が走るたびに複数回エラーのスナックバーを表示してしまったり、です。
StateNotifier を経由して画面遷移をするときにも、 State に遷移先の情報を保持しておくと複数回走ってしまったときにおかしな挙動をしてしまうことがありますね。
Jetpack Compose だったら `LaunchedEffect` などを使って recompose を凌げますが、 Flutter にはそれがなくて困りました。
なぜこんなことに・・・

そもそも何が問題なのでしょうか。

# 問題点
問題点はシンプルで
「 Widget 側で、同じイベントを意図せず複数回受け取ってしまうこと」です。
同じイベントってなんでしょうね。
ここでは Event の `インスタンス` が同じなら同じイベント、異なるなら異なるイベントと定義しておくと狙い通りの挙動

元記事を表示

FlutterでQRコードとバーコードを読み取る簡単なスマホアプリを実装する

# はじめに

この記事ではFlutterを使って**QRコード**と**バーコード**をスキャンして結果を表示するスマホアプリを作る方法について解説します。

コードをスキャンするためにここでは[**mobile_scanner**](https://pub.dev/packages/mobile_scanner)というパッケージを使います。これは比較的に新しいパッケージで人気が高まってきていますが、qiitaではまだこれに関する記事がないので自分で書くことにしました。

# 結果

今回どんなものを作るかわかるように、まずはできた結果から見せておきます。

`.apk`ファイルに出力してAndroidのスマホにアプリを入れてインストールして起動したらこうなります。

![q01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202903/20927c3d-992f-430e-d388-5d1fffa55c2a.jpeg)

そしてボタンを押したらスキャンの画面に入ります。そこで初めての場合はまずカメ

元記事を表示

iOS、Androidアプリでスクリーンショットを防ぐ

# iOS
そもそもスクリーンショットは端末の機能なのでデベロッパーの都合で禁止すべきではないし、完全に禁止というのはできない。スクリーンショットされたことを検知したりする機能もない。

画面の一部を隠すという機能もデベロッパーに提供されてはいない。

ただ、Appleが用意した`UITextField`の`isSecureTextEntry`をonにすると、そのテキストフィールドの部分だけはスクリーンショットに映らないという公式の機能がある。これをハックすると、画面の一部または全体をスクリーンショットに映らないようにすることもできる模様。

[Youtube – Prevent Screenshot – SwiftUI – Xcode 15](https://www.youtube.com/watch?v=viao1kTWBoY)
[github – yoxisem544/ScreenshotPreventing-iOS](https://github.com/yoxisem544/ScreenshotPreventing-iOS)

筆者自身も、スクリーンショットに映らないようにし

元記事を表示

【UE5】AndroidアプリにFirebaseを組み込んだら広告を使用している判定になった

## はじめに
AndroidアプリにFirebase Analyticsを組み込んでGoogle Play Consoleにアップロードしたところ、広告は全く使っていないのに広告IDの申告を更新をしなさいとエラーが出てしまいました。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637961/f612e8ae-2125-686a-dea8-a3a8e9afc026.png)

本記事では、広告IDの使用申告を更新することなくこのエラーを回避する方法を解説します。

## 開発環境
– Windows11
– UE5.1.0
– [Firebase – Features](https://www.unrealengine.com/marketplace/ja/product/firebase-features)(有料です)
– 広告を使用していないモバイルプロジェクト

## 原因
![4.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

Android-ヘルスコネクトを使って単位時間ごとのデータを取得する

## この記事はどんな内容?
– Android(Kotlin)で[ヘルスコネクト](https://developer.android.com/guide/health-and-fitness/health-connect?hl=ja)を使ってヘルスケアデータ(歩数)を取得します

## この記事でやることの詳細
– ヘルスコネクトを介して、2種類の方法でGoogleFit経由で取得している歩数データを取得します
– 基本的なデータのとり方
– 単位時間(今回は1日)ごとのデータのとり方

## 基本的なデータのとり方
[HealthConnectClient.readRecords()](https://developer.android.com/reference/kotlin/androidx/health/connect/client/HealthConnectClient#readRecords(androidx.health.connect.client.request.ReadRecordsRequest))を使用して、取得したいデータ型と期間だけを指

元記事を表示

Androidアプリで表示したHTML画面のボタンタップ時のイベント処理の備忘

# はじめに
Androidアプリの画面は、主にXMLやJetpack Composeによって構築されますが、HTMLファイルを画面として表示させることも可能です。
そのため、HTML画面の表示とボタンタップ処理の制御方法を、本記事に備忘として記載してみました。

# やりたいこと
実装する処理の順序は以下です。
[1. HTML画面のボタンタップでURLスキームが発火される](https://qiita.com/tsuna_san/items/4cbdb63cf3b0b50d6247#1-html%E7%94%BB%E9%9D%A2%E3%81%AE%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%BF%E3%83%83%E3%83%97%E3%81%A7url%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%A0%E3%81%8C%E7%99%BA%E7%81%AB%E3%81%95%E3%82%8C%E3%82%8B)
[2. 発火されたスキームをアプリで検知してダイアログを表示する](https://qiita.com/tsuna_san/i

元記事を表示

Dagger2とは?

![DALL·E 2023-12-11 16.53.45 – A fun and approachable illustration depicting the concept of dependency injection in Android development using Dagger 2. The image should include a ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639815/c92ed497-a0eb-695b-66f3-d346cdb4a836.png)

# *Dagger2*
Dagger2は、オブジェクト間の依存関係を管理し、コードを自動生成するツールです。

### 依存性注入に必要な要素

* Component :
クラスのインスタンスを集める役割を果たし、各インスタンスはModule単位で宣言して提供します。

* 【Android】Intent Flag 対応表

## Intent の Flag まとめ
|フラグ |用途 |
|—|—|
|FLAG_ACTIVITY_SINGLE_TOP |新しいActivityを起動する際に、そのActivityがタスクのトップに既に存在している場合、新しいインスタンスを作成する代わりに既存のインスタンスを再利用する。 |
|FLAG_ACTIVITY_CLEAR_TOP |新しいActivityを起動する際に、同じタスク内で既存の同じActivityのインスタンスが存在する場合、その既存のActivityとその上にあるすべてのActivityをクリアしてから新しいActivityを起動する。 |
|FLAG_ACTIVITY_NEW_TASK |新しいタスク(新しいバックスタック)を開始し、その中で新しいActivityを起動する。
このフラグを使用することで、別のタスクとして新しいActivityを起動することができる。 |
|FLAG_ACTIVITY_CLEAR_TASK |既存のタスク内の全てのActivityをクリアして、新しいActivityを起動する。 |
|FL

元記事を表示

【Android】Warning: debug info can be unavailable. Please close other application using ADB: Monitor, DDMS, Eclipse 解消方法

## デバッグする時の、このエラーを解決したい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917260/df78fc1e-4261-f5f2-d8a0-5c737bac8c87.png)

## (わたしは)解決しなかったパターン😒
:point_right_tone2: ADB(Android Debug Bridge)の再起動してみる
“`
adb kill-server
adb start-server
“`

## (わたしは)解決しなかったパターン😒
:point_right_tone2: AndroidStudioを再起動する

## (わたしは)解決したパターン🚀
:point_right_tone2: スマホを再起動する

## おわりに
エラー解決がんばるぞい!

元記事を表示

【自分用メモ】Viewのサイズ指定に使っている数字をResourcesに移動する際に役立った記事

以下の2つの記事がViewのサイズ指定に使っている数字をResourcesに移動する際に役立った記事

# Is it possible to create a “dp” variable in xml?
https://stackoverflow.com/questions/51033561/is-it-possible-to-create-a-dp-variable-in-xml

上の記事で大体理解したが「dimens.xml」といったファイルをどこで作成すればいいのか分からなかったので調べてみたら以下の記事が役立った。

# dimens.xmlを使ってテキストサイズ指定 – Android

dimens.xmlを使ってテキストサイズ指定 – Android

# 【以下関連動画】
dimensとは

dimen属性の設定方法

元記事を表示

ActivityResultContract時代のランタイムパーミッションリクエスト

ラインタイムパーミッションのリクエストは伝統的に `requestPermissions()` ~ `onRequestPermissionsResult()` で行われていましたが、この方法は非推奨となり、ActivityResultContractを使うことが推奨されていますね。

Activity/FragmentのコンストラクタもしくはonCreateにて

“`kotlin
private val launcher = registerForActivityResult(RequestPermission()) {
if (it) {
// 許諾得られた
} else {
// 許諾得られなかった
}
}
“`

として、コールバックを定義したActivityResultLauncherを登録し、以下のようにリクエストするパーミッションを引数に指定し、リクエストします。

“`kotlin
launcher.launch(Manifest.permission.XXXXX)
“`

単純なリクエストするだけであれ

元記事を表示

JetpackComposeのWebViewで上部に読み込みインジケータを表示する

# はじめに
今回はJetpackComposeのWebViewで上部に読み込みインジケータを表示する方法を紹介していきます
### 本文
Composebale関数内で下記の処理を記述します
newProgressは1から100で帰ってきますがProgressIndicatorは0から1で表示するので
渡す場合は100で割らないとずっと読み込み完了のままインジケータが進みません
“`kotlin
val isLoading = remember { mutableStateOf(true) }
val currentProgress = remember { mutableStateOf(0f) }

val webChromeClient = object : AccompanistWebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)

元記事を表示

【Android】GoogleMap上に円や線を表示する【Kotlin】

# 線を表示

googleMap.addPolyline(
PolylineOptions()
.color(R.color.red)
.add(LatLng(35.689, 139.692), LatLng(35.666116, 139.758380))
.width(20f)
)

|プロパティ|内容|その他|
|:—|:—|:—|
|Points|線の頂点。線分は連続した点の間に描画される。|頂点数は最大16000まで。上限を超えた頂点は描画されない。
|width|線の幅|カメラのズームとは無関係に、一定に保たれる。デフォルトは10。
|color|線の色|デフォルトは黒(0xff000000)
|visible|地図上に表示されているかどうか、trueなら表示|デフォルトはtrue
|clickable|オブジェクトをクリックしたときのイベントをハンドリングしたい場合は、このプロパティにtrue|デフォルトはfal

元記事を表示

FlutterのImagePickerで画像のキャッシュが残ってしまう問題

[株式会社Never](https://neverjp.com/)のshoheiです。

株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/

# 概要

Flutterでカメラや写真から画像を扱う際は、[image_picker](https://pub.dev/packages/image_picker)を使うかと思います。image_pickerはとても簡単に使えて便利なパッケージですが、画像のキャッシュが端末内に残ってしまい、ストレージを圧迫することがあったので、その対策をまとめます。

# `image_picker`で選択した画像の保存先

iOSとAndroidではそれぞれ異なります。

|OS |保存先 | 保存先の取得方法|
|—|—|—|
| iOS |

元記事を表示

stability.aiのREST APIを使って簡単に画像生成アプリを作ってみた

# はじめに

前回「[Stable Diffusion APIを使って簡単に画像生成アプリを作ってみた](https://qiita.com/razuma/items/6af94f8d0edf67a0bffe)」と言う記事を書きましたが、今回は本家のstability.aiのREST APIを使って画像生成アプリをつくりました。

# 利用したサービス
Stable Diffusion本家のStability AI
https://platform.stability.ai/
画像1枚作成ごとにコストがかかる。最初に少しだけ無料でトークンをもらえます、その後は自分で追加していく方式。設定するパラメータによってかかるコストが違います。

# 今回使用したAPI
v1/generationのtext-to-image
https://platform.stability.ai/docs/api-reference#tag/v1generation

設定できる各パラメータについては以下

height: 画像の高さ、設定できる値は使用できるモデルによって決まっている
width: 画像の

元記事を表示

Googleコードスキャナを使ってAndroidアプリにQRコード読み取り機能をお手軽導入

Androidアプリでワンショットのコードスキャン機能が滅茶苦茶簡単に実装できるようになっていました。というネタ

https://developers.google.com/ml-kit/vision/barcode-scanning/code-scanner?hl=ja

この記事に書かれている通りなので、蛇足も蛇足ですが…アプリのメイン機能ではなく、特定の手続きで1回だけなど、QRコードを読み取り機能が欲しくなることはよくあります。
この方法を使えば**カメラパーミッションも不要**で、簡単にQRコードを読み取ることができます。(世の中にはカメラを搭載していない端末もあるので、プロダクトで利用する場合、その考慮は必要かと思いますが)
Google開発者サービスがスキャン機能を提供しており、アプリはスキャン結果のみを受けとるというものです。アプリがカメラ画像に一切アクセスしないため、プライバシーポリシーのケアなども(規約上は)不要です。

|||
|–|–|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

ML Kitでバーコードスキャンして検出したコードの位置を表示する

AndroidではML Kitを使用することで簡単にコードリーダーアプリを作ることが可能です。

https://developers.google.com/ml-kit/vision/barcode-scanning/android?hl=ja

コードを検出した際、画像のどの領域のコードを検出したのかという情報を表示したいこともあるでしょう。
以下のような表示です。
これを実現するにはどうすれば良いかというお話です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/893f7021-6f38-be8d-7c00-4c7feeec164e.gif)

ML Kitを使ったQRコードリーダーアプリの作り方はGoogleのドキュメントを参照ください。過去以下のような記事を投稿しています。

https://qiita.com/ryo_mm2d/items/982809ab940dc9549fba

# 検出した座標の取得

`BarcodeScanner`の検出結果である`Barcode`には

元記事を表示

PythonでAndroidスマホのシリアル通信をする。

# はじめに
WindosやLinuxのPCからPythonでシリアル通信をする場合“`pyserial“`を使えば可能。しかしAndroidスマホでは使えなかった。本記事では、Androidスマホでシリアル通信するライブラリ“`usbserial4a“`についてまとめる。

# 目次
+ [usbserial4a](#usbserial4a)
+ [ポート番号のリストとポートのオープン](#ポート番号のリストとポートのオープン)
+ [シリアル通信の送受信](#シリアル通信の送受信)
+ [Kivyでシリアル通信アプリを作る](#kivyでシリアル通信アプリを作る)
+ [作ったコード](#作ったコード)

# usbserial4a
Androidのスマホでシリアル通信するためのライブラリ。“`pip install usbserial4a“`と“`pip install usb4a“`でライブラリ取得。kivy上で動作するライブラリなので、Kivyとセットで使う。Kivyについての記事は  [PythonのGUIライブラリKivyを使う](https://qii

元記事を表示

OTHERカテゴリの最新記事