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

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

【Android】GoogleMapの専用UIの位置を変える【Kotlin】

# はじめに
GoogleMapを用いたアプリでは GoogleMapUIがあり、GoogleMapの操作をUI行うことができます。
ズーム、コンパス表示、現在地ボタン、屋内で使われる階層別で表示できるレベルピッカー、マーカーをタップした時に現れるマップツールバー などがあり 基本的にマップの上端、下端、左端、右端の位置に表示されます。
詳しくは 分かりやすくまとめてくれている記事やAndroid公式を見てもらえればと思います。

今回は、その表示位置を変更する方法を記事に残しておこうと思います。

# 実践
公式では、

>コントロールを上端、下端、左端、または右端から移動するには、GoogleMap オブジェクトにパディングを追加します。

とあります。

“`
googleMap.setPadding(0,0,0,0)
“`
引数には 第一引数から順に left,top,right,bottom の順に入れていきます。

# 参考

https://developers.google.com/maps/documentation/android-sdk/contro

元記事を表示

JetpackComposeでFirebaseAuth(GoogleOneTap認証)

# GoogleアカウントのOneTap+FirebaseAuth with JetpackCompose
JetpackComposeで、GoogleアカウントのOneTap+FirebaseAuthを実装していきます。

## 関連記事
– [FirebaseAuthのパスワード認証](https://qiita.com/jozuko_dev/items/f8106009ad4571740d1f)

## エンドポイント
### GoogleアカウントのOneTap
| エンドポイント |   |
|:–|:–|
| SignInClient.beginSignin(BeginSignInRequest) | OneTap認証画面を表示します |
| signInClient.getSignInCredentialFromIntent(resultData: Intent) | OneTap認証画面から戻ってきたときのResultDataをGoogleアカウントのCredentialに変換します |

### FirebaseAuth
| エンドポイント |   |
|:–|

元記事を表示

jetpack composeで遷移先から遷移元にデータを返す

# はじめに
今回は`JetpackCompose`を使って`setFragmentResult`のように遷移先から遷移元にデータを返す方法を紹介していきます
### 本文
やること自体は至極単純です。
まず、遷移先から遷移元に戻る時に下記のようにします
“`kotlin
navController.previousBackStackEntry?.run {
savedStateHandle[“result”] = “hoge”
}
“`
次に遷移元で結果を受け取るように処理を書きます
“`kotlin
val result: String? = navController
.currentBackStackEntry?.savedStateHandle?.get(“result”)
“`
こうすることで簡単に値を戻すことができます。
ここで注意が必要なのがデータが保持され続けることと何度も`recompose`されてしまう可能性があるということです。
そのため、下記のようにすることで回避することができます。
“`kotlin
navController.cu

元記事を表示

Androidで読み取り専用のNFCタグを作成する

## この記事は
Android端末でNFCタグにURIを書き込む際に二度と上書きされないようにNFCタグを読み取り専用にしたい場合が出てくると思います。今回はコーディング一切無しでそれらを実現する方法をご紹介します

## 用意するもの
### 使用するアプリ
NFCタグを読み取り・書き込みできるアプリがPlayStoreにあるのでそちらをダウンロードしましょう

https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=ja

### 使用するNFCタグ
特に理由はないですが比較的安価で評価が高いものを選びました

## 具体的な方法
### 書き込み可能か確認
まず、何もデータが入っていない空の状態のNFCタグを読み取って書き込み可能であることを確認します。「読む」のタブに切り替えるとNFCタグの読み取り待機状態になるの

元記事を表示

小ネタ:リモートワークに役立つ Android Studio の機能(端末の画面共有)

リモートワークに役立つ Android Studio の機能を知ったので、記事にします。

リモートワーク中に画面共有をしながら打ち合わせをすることがあると思います。
Emulator であれば共有画面で動作を見せることができましたが、Electric Eel からは Android 端末の画面共有も可能となりました。

##### 設定方法
**Electric Eel**
Preference -> Experimental -> Device Mirroring -> Enable mirroring of physical Android devices にチェックを入れる
これにより、Running Devices タブで Android 端末を Emulator と同様に Android Studio で表示することができます。
https://android-developers.googleblog.com/2023/01/android-studio-electric-eel.html

**Flamingo**
Flamingo では Preference -> T

元記事を表示

【Android/Java】外部アプリ起動(Android11)

## やりたいこと
外部アプリを起動したい。
Android11から[package-visibility](https://developer.android.com/training/package-visibility/declaring?hl=ja)が導入され、外部アプリを起動するためのお作法が変更となった
とりあえず、起動させるためのお作法を記載

#### AndroidManifest.xml
~~~xml









元記事を表示

[Android]Android14(APIレベル34)の影響範囲と実装コードの対応について

## はじめに
毎年iOSもAndroidも夏から秋にかけてメジャーバージョンアップされます。androidはiosほどにコードに変更を加えないといけないほどの致命的なことは少なかった印象です。
今回Android14はそうではないかもしれないということで備忘録メモしておきます。
詳しくはドキュメントを参照してください。
プレビュー版は2月、ベータ版は4月にリリースされているため開発者は動作確認できます。(自分はしていません)
メインスマホはiPhoneを使っているので、Androidはどうもベータ版を入れるモチベーションが出ません。

![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109862/fefbc461-a3b4-1a30-0b67-b3794ebd9fd5.png)

去年のAndroid13は8月、Android12は10月リリースでした。
今年は8月あたりにリリースされそうです。

https://gist.github.com/y-matsumoto/5a48bd982aea5

元記事を表示

[`Process 〜 has died`] アプリが頻繁にクラッシュする Android 端末の相談対応に logcat を使って調査/改善した

2019 年ごろ購入した docomo キャリアで購入した Android 端末でアプリが頻繁にクラッシュすると相談を受けた。

調査/改善したため対応ログをまとめます。

## 相談時の現象

Android 8.1

– 前日にはふつうに使えていた。
– アプリが頻繁にクラッシュする前後に特殊な操作はした覚えがない。
– よくクラッシュするアプリと現象は以下だった。
– LINE(SNS):アプリを開いて数秒は動作するがそのあとクラッシュ
– ツムツム(ゲームアプリ): スプラッシュ画面が出る前にクラッシュ
– ほかのアプリもクラッシュしていたが、上記アプリよりひどくなかった
– 再起動は相談前に数回していて改善しなかった。
– 「設定」→「ストレージ」でストレージは合計128GB で空きは 8GBだったので満タン付近だった。
– 「設定」→「ストレージ」→「メモリ」で3時間の平均メモリ使用量が合計 6GB、使用 2.5GBなことを確認した。
– 設定アプリはふつうに動いていた。
– 開発向けオプションは有効になっていない。(使っていたのはエンジニアではなく特殊な設定は

元記事を表示

【Android】一定時間毎に何かをする処理【Kotlin】

# 実践

“`
Timer().schedule(0, 1000) {
// 繰り返し行いたい処理
}
“`

Timer().schedule()というものを使っていきます。
Android 公式では
> 指定された遅延後に開始される、 指定されたタスクの繰り返し固定遅延実行をスケジュールします。
とあります。

第一引数に 何秒後に開始するか。(m秒)
第二引数に 何秒毎間隔で実行するか。(m秒)
処理を終わらせたい場合は {}内に  **this.cancel()** でTimer()をキャンセルすることで繰り返し処理をキャンセルできる。

# 終わりに
こういった時間を使う系のものは少し前に記事にした、Handlerなんかでもできるんだろうなと思いつつ、あえて違う方法でやってみました。
どちらが使いやすくて、どういったメリットデメリットがあるのか イメージしながら実装していくためにもう少し知っていきたいですね。

# 参考

https://developer.android.com/reference/java/util/

元記事を表示

Jetpack Composeのテストで出てくるmerged tree、unmerged treeとは何か

かなり基本的なことなんですが、よく分かっていない方も多いのではと思い書いています。
Jetpack Composeで開発していて以下のようなエラーに遭遇しました。

Composeのコード

“`kotlin
NavigationBarItem(
selected = selected,
onClick = {

},
icon = {
Icon(
imageVector = tab.icon,
contentDescription = “Hoge”,
)
},
)
“`

テスト

“`kotlin
composeTestRule
.onNodeWithContentDescription(“Hoge”)
.performClick()
“`

エラー

“`
java.lang.AssertionError: Failed to inject touch input.
Reason: Expected exactly ‘1’

元記事を表示

Ionic/Angular/SQLiteとcordova(Android)

AndoroidモバイルアプリでSQLiteにデータを格納したく、サンプルアプリを作ってみました。
他のWebサイトでも多くの先輩方が掲載をしてくださっていましたので参考にさせていただきました。
今回は、今現在最新のバージョンでサンプルアプリを作成してみました。
ソースコードはGithubに公開していますのでなにかの参考にしていただければ幸いです。

## ライブラリのバージョン
* ionic/angular Version 7
* Angular version 16
* Ionic version 7
* cordova plugin SQLite database version 6.4
* cordova SQLite Porter version 6.4

:::note
動作確認はAndroidのエミュレータを使用します。
:::

## 主な機能
* アプリ起動時のデータベースファイルの作成(サンプルレコードのINSERT)
* Person情報の登録、更新、削除

## UI/画面構成
* Person一覧画面
![image.png](https://qiita-i

元記事を表示

IO処理を待ってから画面遷移する方法

# はじめに
画面遷移をする際に事前にサーバにリクエストしてから遷移したいときってありますよね。
単純にIO処理を待ってから画面遷移をするだけでできると思ったのですが、そう簡単にはいかなかったので解決策をまとめておきます。

# 環境
2023年7月時点で以下の環境で実施しています。
“`gradle:build.gradle.kts(プロジェクトルート)
plugins {
id(“com.android.application”).version(“8.0.2”).apply(false)
id(“com.android.library”).version(“8.0.2”).apply(false)
id(“org.jetbrains.kotlin.android”).version(“1.7.20”).apply(false)
id(“com.google.dagger.hilt.android”).version(“2.44”).apply(false)
}
“`
“`gradle:build.gradle.kts(モジュール)
depen

元記事を表示

Android14の重要そうな差分まとめ

# はじめに
Android13が出てきたのがつい先日のように感じますが、もうAndroid14がでようとしていますね。
個人的にはAndroid13もそれなりに修正が必要な差分があり大変な印象がありましたが、14ではどうでしょうか?
先んじて重要そうな差分を備忘録的にまとめておこうと思います。

# 正確なアラームのスケジュール設定がデフォルトで拒否される

> Android 13 以降をターゲットとする新しくインストールされたアプリのほとんどで、SCHEDULE_EXACT_ALARM 権限が自動的に付与されなくなりました(権限はデフォルトで拒否されます)。

https://developer.android.com/about/versions/14/changes/schedule-exact-alarms?hl=ja

とのことです。
アラームって最近使うことないですが、使用されているプロジェクトで自動付与の恩恵を受けているプロジェクトは上記権限要確認ですね。
ただし、 OnAlarmListenerを使用して通知を受けている場合は上記権限は必須でないようです。

# フ

元記事を表示

JetpackComposeでFirebaseAuth(パスワード認証)

# JetpackComposeでFirebaseAuth(パスワード認証)
FirebaseAuthのパスワード認証をJetpackComposeで実装したいと思います。
The Firebase Blogの「[Adding Firebase Authentication to a Jetpack Compose app](https://firebase.blog/posts/2022/05/adding-firebase-auth-to-jetpack-compose-app)」を参考にしたのですが…いかんせんわかりづらいですね…
もう少しかみ砕いた感じで実装していきます。

## 関連記事
– [JetpackComposeでFirebaseAuth(GoogleOneTap認証)](https://qiita.com/jozuko_dev/items/706fc6c89e6982bfd7e2)

## FirebaseAuth(パスワード認証, 匿名ユーザ)のエンドポイント

| エンドポイント | |
|:–|:–|
| auth.signInAnonymou

元記事を表示

SkyWay Android SDK クイックスタートが残念な件

SkyWay Android SDKを使ってみました。

まずは[SkyWay Android SDK クイックスタート](https://skyway.ntt.com/ja/docs/user-guide/android-sdk/quickstart/)に従って、小さい実装を組みましたが、クイックスタートの内容が残念だったで記します。

まず
![スクリーンショット 2023-07-21 13.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103548/ecec0720-746e-3381-1f88-06da572a1f72.png)
とありますが、これは不要です。
使っているのはAndroid Studio Flamingoですが
“`
buildFeatures {
compose true
} 
“`
のままで良いです。
このオプションはJetpack Composeを使うかどうかのオプションですが、そもそもJetpack Compose と la

元記事を表示

Moshiを使ったJsonのコンバート

# はじめに
今回はGsonが非推奨なのでMoshiを使ってのJson変換を紹介していきます
### 本文
コード自体は下記の通りです
“`kotlin
Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
.adapter(HogeData::class.java)
.fromJson(Json)
“`
`adapter`の中には変換先のデータクラスを渡し、`fromJson`には変換したい`Json`を渡します。
ここで***2点***注意が必要なのですが、
***1つ目***が`.add(KotlinJsonAdapterFactory())`Kotlin用のFactoryを追加することです
***2つ目***は変換先のデータクラスで下記二つのアノテーションをつけることです。
データクラス自体には`@JsonClass(generateAdapter = true)`
各種変数には`@Json(name = “hoge”)`
### 最後に
今回はだんだんと増えてくるであろうMoshiの実装方法を紹介していきました

元記事を表示

アシスタントアプリとして起動できるAndroidアプリの作成

# はじめに
この記事ではAndroidアプリをアシスタントアプリとして登録したい時に設定するコードについて紹介します。

例としてコードを掲載していますが、まだ開発途中であるため、一部機能が使用できず、また強制停止が頻発します。あくまで参考程度でお使いください。

# Androidスマホのショートカット機能
Androidスマホには、画面の右下から中央下に指をスライドしたり、ホームボタンを長押しするとアシスタントアプリが起動するショートカットが実装されています。また、端末によっては、アシスタントキー(SHARP AQUOS)や、Googleアシスタントボタン(SONY Xperia)などの、アシスタントアプリを起動するためのボタンが存在します。

しかし、あまり使わないんですよね。この機能。
じゃあ別のアプリを割り当てたい。

でも残念なことに、これらのショートカットは、アシスタントアプリとして登録されているアプリでないと、起動させられないんです。
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

元記事を表示

OTHERカテゴリの最新記事