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

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

【自分用メモ】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

元記事を表示

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

元記事を表示

WebViewの「戻る」操作をOnBackPressedCallbackで実装する

WebViewを使ったアプリ内ブラウザを作る場合、伝統的にWebView内の「戻る」操作は以下のように実装されてきました。

“`kotlin
override fun onBackPressed() {
if (webView.canGoBack()) {
webView.goBack()
} else {
super.onBackPressed()
}
}
“`

WebViewのコンテンツが戻る操作を受け付ける場合は、WebViewにバック操作を行わせ、WebView内コンテンツが戻れない状態になったら、ネイティブのナビゲーションに利用し、最終的にアプリを終了させる操作につなげます。

しかし、`onBackPressed`はAPI 33でDeprecatedとなりました。

https://developer.android.com/reference/android/app/Activity#onBackPressed()

これからは `OnBackPressedCallback` を使って実装することが求められま

元記事を表示

大学を留年しかけたので楽単を検索できるアプリを作ってみたらユーザー数が1000人超えちゃった話

# お前誰やねん
![](https://storage.googleapis.com/zenn-user-upload/a8146d8aa5fa-20231203.png)
岡山理科大学に在学しているGadgeloggerと申します。
学部は情報系で大学の勉強の傍ら、趣味でFlutterやSwiftなどモバイルアプリを作っていることにハマってます。
絶賛就活中で面接落ちしまくっているのが悩みどころ

# アプリの概要
**動画**

https://x.com/TAN_Q_BOT_LOCAL/status/1495295998759153666?s=20


**紹介サイト**

https://ous-unoffical-app.studio.site/​

まあ詳しくはここを見てほしい(というか書くのめんどくさい)んやけど、
・大学の便利な情報を掲載(電話番号とかマップとか掲示板とかね)
・楽に単位が取りやすい講義・取りにくい講義を投稿できるSNSのような機能
を搭載している感じやわ。
押したい機能は後者の方やね。
# 制作背景
制作しようと思った理由は2つあっ

元記事を表示

Flowとは?

![スクリーンショット 2024-01-05 13.44.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639815/2d88ac67-9416-f5ad-3e47-347a13684bba.png)

## コルーチンのFlowは非同期データストリーム
#### 非同期とは?
-> 二つの関数が一つ実行後終了し、次の関数を実行するのではなく、二つを同時に実行可能なことを非同期といいます。そして、仕事を終えて返すことが __コールバック__

#### データストリームとは?
データを消費する消費者とデータを発行する発行者がおり、発行者は消費者に対して継続的にデータを発行することです。

コルーチンでデータストリームを使うためにFlowを使用します。

#### Flowのデータの核心は次の3つで構成されます。
– 生産者 (Producer)

元記事を表示

kaptからKSPに移行しようとしてコケました

表題のままなのですが、備忘録として解決方法を残しておきます。

## Environment
– Android Studio Hedgehog
– AGP 8.2.0
– Hilt 2.50
– KSP 1.9.21-1.0.16

ちなみにプロジェクトの構造は[nowinandroid](https://github.com/android/nowinandroid)を参考に作っています。

## Problem
[HiltがKSPをサポートするようになった](https://dagger.dev/dev-guide/ksp.html)ので、公式の[マイグレーションガイド](https://developer.android.com/build/migrate-to-ksp)に従ってkaptからKSPに移行したところ、ビルドでコケてしまいました。

エラー内容

“`
Some problems were found with the configuration of task ‘:core:api:kspDevelopD

元記事を表示

MVVMとは?

![DALL·E 2023-12-11 16.55.44 – A visually appealing and informative thumbnail for a blog post about MVVM architecture in Android development. The image should feature a stylized and.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639815/fcef73f5-2aa4-affd-a37c-1bf50cee8555.png)

# *MVVM パターン*
Model, View, ViewModel

MVVMパターンは、MVCパターンからコントロールラーを抜き、ViewModelを追加したパターン
それぞれの概念が独立的に存在し、テスト、メンテナンス、再利用が容易だが、設計するのが難しく、それでも慣れれば簡潔なコードでアンドロイドでもMVMを好むという。

* M

元記事を表示

【Android】 CircleCI + Roborazzi + Showkase で VRT 試しました

VRT (Visual Regression Testing) = 画像回帰テスト

技術記事初投稿になります。
2023年3月からAndroidアプリエンジニアとなったKSNDといいます。
いつもは [X(Twitter)](https://twitter.com/ksnd_dev) で技術的なことを呟いたりしていますが、今回はかなり量があったのと技術記事書くのを2024年の目標の1つにしていたので書きました。
ご指摘や、改善点など教えていただけると幸いです。

|項目|
|—|
|[今回VRTを試した理由](#今回vrtを試した理由)|
|[完成品](#完成品)|
|[実際に試した際の比較画像](#実際に試した際の比較画像)|
|[使用したライブラリやサービス](#使用したライブラリやサービス)|
|[VRTの大まかな流れ](#VRTの大まかな流れ)|
|[Roborazzi導入](#roborazzi導入)|
|[Amazon S3に画像を保存するときのパス](#amazon-s3に画像を保存するときのパス)|
|[Circle CI の Orbs、ジョブ、コマンド とその説

元記事を表示

Gradle / AGP 8系アップデート: 直面したエラーと解決策

GradleおよびAGP(Android Gradle Plugin)を7系(7.3.0)から8系(v8.2.0)にアップグレードした際に、ビルドプロセス中にいくつかのエラーに直面しました。
AGP8.0.0には破壊的変更がいくつかありました。[release-notes](https://developer.android.com/build/releases/past-releases/agp-8-0-0-release-notes
)

ここでは、発生したエラーの解決方法を記録しておきます。
この記事がいずれ同じ問題に直面した方々の参考になれば幸いです。

バージョン差分 ↓
“`diff_gradle
plugins {
– id “com.android.application” version “7.3.0” apply false
+ id “com.android.application” version “8.2.0” apply false
}
“`
“`diff_gradle
dependencies {
– classpath ‘com.andro

元記事を表示

自社のAndroidアプリがHTTP/2を利用しているか確認してみた

本稿は[KLab Engineer Advent Calendar 2023](https://qiita.com/advent-calendar/2023/klab) の25日目の記事です。

すみません、大遅刻になってしまいました。24日目までのKLabのエンジニアの皆さん無遅刻で書いていただいて本当に感謝です。

# 自社のHTTP/2対応状況、把握してますか?

モバイルアプリケーションのユーザー体験向上を考えるとき、通信の効率化は重要な要素と言えるでしょう。中でもプロトコルの選択は大きな関心事です。本稿のテーマであるHTTP/2、あるいはHTTP/3について、自身のプロジェクトでの導入を検討・議論したことのある人は珍しくないはずです。

一方で、自分たちのアプリが実際にHTTP/2を使っているかどうか確認している人は少数派ではないでしょうか。昨今ではHTTPS通信が大前提なので、通信の中身を覗き見るのは意外と面倒だったりします。自社のアプリではまだHTTP/2が導入できていないと誤解している場合、そもそも確認をしようと思わないかもしれません。

実は、KLab社内でもHTTP

元記事を表示

【Android】センサーを使うときに端末の電池の消費を抑える【Kotlin】

# はじめに
センサーを使った記事を最近よく書いていますが、センサーを使っていると端末が熱くなり 電池の消費が速くなっていると感じます。そこで、端末の消費電力を抑える方法を調べたので記事に残しておこうかと思います。

# 取得取得時間を指定する

センサーのリスナーを指定するregisterListenerを使う際に第4引数に
**maxReportLatencyUs**(古いものだとmaxBatchReportLatencyUsとなっている)を指定することでセンサーの値の取得間隔を指定することができます。
センサーが動く度に値を取得するとより多くの電池を消費してしまうので、必要な時だけ取得するように取得間隔を指定すると電池の消費を抑えられるでしょう。

“`
registerListener(SensorEventListener listener, Sensor sensor, int samplingPeriodUs, int maxReportLatencyUs)
“`
 # 参考

https://developer.android.com/reference/and

元記事を表示

flutterのandoirdアプリを内部テストしようとしたら起動できなくて泣いちゃった。。。

## 事の背景
昔、公務員として土木業界で働いていたのですが、当時の現場作業を簡略化できるアプリを作りたい、、、
そう思い経験0のFlutterに手を出してみた。
いざ、リリースに向けて内部テストでabbファイルをアップロードするも、スマホにインストール後「開く」ボタンが出てこず起動できない。。。
私が愛してやまないflutter cleanコマンドと とビルドを繰り返すも全く解決せず、ということで本当に泣きかけていた。

## 結論
AndroidManifext.xmlファイルの は、初期から追加する際は別タグを用意する必要がある。
助けてくださったサイトはこちらです、、、本当にありがとうございました!!!!
https://note.com/chute/n/n75cde5f1712a

## 症状の詳細

こちらではgoogle play consoleの詳細は省く。
内部テストでリリースしたアプリのURLをスマホで開き、アプリをインストール。
![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

android端末で開いてるWebのデバッグ方法

# はじめに
今回はAndroid端末で検証している時にWebViewで表示しているサイトの情報やコードを見れる方法を紹介していきます
### 本文
androidStudioを開いているPCのChromeで下記のサイトを開くだけです
“`
chrome://inspect/#devices
“`
そうすると画像のような表示が出てきますRemoteTargetに接続している端末が表示されるのでそれを選択することでWebViewの情報などを見ることができます
![スクリーンショット 2023-12-31 12.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638092/4c3b61b1-eac4-7863-bc11-95983ced7ee5.png)
### 最後に
今回は自分の備忘録としての役割が強いですが、WebView内の通信や情報を監視する方法を紹介してみました
どなたかのお役に立てれば幸いです

元記事を表示

OTHERカテゴリの最新記事