Android関連のことを調べてみた2022年11月14日

Android関連のことを調べてみた2022年11月14日
目次

【kotlin】遅延させる方法

# はじめに
今回はコルーチン内で処理を遅延させる方法を記事にします!

参考にしたページも併せて載せておきます

[kotlinx.coroutines1.6.4](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/delay.html)

[kotlin公式](https://developer.android.com/kotlin/coroutines/test?hl=ja)

# delay
やり方は使用しているCoroutineScope内で

delay()というsuspend関数を呼び出し引数にLongで遅れさせたい秒数を記述します
“`
val textView: TextView = findViewById(R.id.text_view)

suspend fun delayDisplayText() = withContext(Dispatchers.IO) {
delay(1000L)

元記事を表示

【Kotlin】TabLayout + ViewPager2とFloatingActionButtonでモダンなボトムタブを作成する

## 作りたかったもの
これが今回の完成形になります。
個人的にはかなり満足な画面になりました。
complete.gif

#### ソースコード
https://github.com/arutoria000/arutoria_apps/tree/feature/step1_custom_tablayout_add

# 前提条件
## 環境
・Android Studio Dolphin | 2021.3.1
・Kotlin : 1.7.20

## ライブラリ
・androidx.viewbinding.ViewBinding
・androidx.constraintlayout.widget.ConstraintLayout
・androidx.viewpager2.widget.ViewPager2

元記事を表示

ラブラリ/モジュールのGradle/Mavenの依存関係伝搬について

ライブラリやモジュールを作る時、依存関係を伝搬させるかどうかという話が出てきます。
この考え方をちょっと勘違いしていました。

通常、依存関係のあるライブラリは**implementation**を使います。

“`kotlin
implementation(“com.example.library:library:1.0.0”)
“`

これがライブラリで、pomファイルを出力すると、scopeは**runtime**となります。

“`xml

com.example.library
library
1.0.0
runtime

“`

一方、依存関係をライブラリ/モジュールの利用側に伝搬させたい場合は、**api**を利用します。

“`kotlin
api(“com.example.library:library:1.0.0”)
“`

これがラ

元記事を表示

【Android】データ セーフティ セクション対応しないと審査に落とされる話

# はじめに
みなさん、データ セーフティ セクションってご存知ですか?
GooglePlayが提供している機能の一つですが、公式の説明を抜粋すると、
`アプリが収集または共有するユーザーデータをユーザーに把握してもらい、アプリの主なプライバシーとセキュリティの方針を紹介するための簡単な方法です`
だそうです。
本日はこちらに関して、対応しないと審査に落とされるよ、というお話をしたいと思います。

# データ セーフティ セクション未対応で審査に落とされる話
データ セーフティ セクションは先ほど述べたとおり、ユーザーに対してアプリが取得するデータがなんなのかを通知する仕組みであるわけですが、こちらの対応が`2022年8月22日`までに対応必須だったことはご存知でしょうか?
もしかするとご存知なくアプリの審査を落とされたなんて方が中にはいるかもしれません。

データセーフティーセクションはPlayConsole上で、`アプリのコンテンツ > データセーフティ` と確認すると設定有無が確認できます。
未設定の場合は以下のような表記になっているはずです。

![データセーフティセクション

元記事を表示

【Androidアプリ開発】PNG画像をベクター画像(SVG形式)に変換して色も変更してアプリアイコンに設定する方法

[yamaday0u](https://twitter.com/yamaday0u)です。

会社のタスクで、アプリアイコンに設定したいPNG画像をベクター画像にする時にかなり苦戦したので、同じ苦労をする人を少しでも減らせるよう、解決した方法を紹介します。

本記事の内容は以下のとおりです。

– PNG画像をベクター画像(SVG形式)に変更(無料サービスを利用)
– Android Studioでアイコン設定
– ベクター画像の色を変える

## PNG画像をベクター画像(SVG形式)に変更(無料サービスを利用)

説明用のサンプル画像として以下のPNG画像を使用します。

heart.png

(【Android】LifecycleOwner として Fragment 自身ではなく viewLifecycleOwner を使うべき場合

`Fragment` クラスは `LifecycleOwner` インターフェイスを実装しています。
しかし `LifecycleOwner` オブジェクトとして、`Fragment` オブジェクト自身ではなく、
`Fragment.viewLifecycleOwner` プロパティが返すオブジェクトを使うべき場合があります。

本稿では、まず前提となる ライフサイクル、`Lifecycle` クラス、`LifecycleOwner` インターフェイス について簡単に説明してから、その本題について説明します。

## ライフサイクル

アクティビティやフラグメントにはライフサイクルがあります。

![アクティビティのライフサイクル](https://developer.android.com/guide/components/images/activity_lifecycle.png?hl=ja “アクティビティのライフサイクル”) ![フラグメントのライフサイクル](https://developer.android.com/static/images/fragment_lifec

元記事を表示

Android位置情報取得についての覚書き

## 概要
「移動している状態で位置情報を欲しいとき高精度で最新かつほぼ最新の値で取りたい。けど、位置情報を更新し続けて常に最新を保つほどでもない。電池効率も悪いし。」
という状況になったときに
FusedLocationProviderClient.getCurrentLocation()
に当たりました。
ただこのような有用メソッドがありつつ、あまり調べてもあまり良い記事に当たらなかったので(調べ方が雑なだけ?)
[AndroidDevelopers](https://developer.android.com/training/location/retrieve-current “直近の位置情報を取得する”)にもちょこっと書いてあるだけで具体的なコードはなし。

正直まだ分からないところもありますが、他の位置情報取得APIと合わせてメモ書き
前置きはいらねーぜという方は「getCurrentLocation()を使う」だけ見れば良い

## LocationManager
位置情報取得の一例としてはLocationManagerを使うのが昔ながら(?)のやり方だと思う。
こちらは

元記事を表示

[Kotlin]ファイル名が被ってimportするとどっちかがフルパスになっちゃうとき(メモ)

## 答え
importのところに as を使って新しい名前をつけてあげる。

## 公式
https://kotlinlang.org/docs/packages.html#imports

## 例
“`
import org.example.Message
import org.test.Message
“`

ファイルは違うんだけどMessageって名前被ってるからどっちかがフルパスになる…

## なので
“`
import org.example.Message
import org.test.Message as testMessage
“`

下のtest.Messageの方をtestMessageってことで名前をつけてあげる。

使う感じ
“`
import org.example.Message
import org.test.Message as testMessage

fun xxx():String{
Message.foo() + testMessage.bar()
}
“`

みたいな。

元記事を表示

[Kotlin]sealed interfaceの使い道(メモ)

## 使い所
– enumみたいに使いたいとき
– elseを書きたくないとき
– (他にもあるはずだけど私はわからない)

## sealed interfaceとは
– ざっくり、「interfaceを継承できる範囲に制限をかけれる」
– interfaceの中に書いたやつ、もしくは同じファイル内のやつしか継承できない。
– なのでwhenで条件分岐したときに”else”が要らなくなる。

## 例:ただのinterfaceの場合
“`
fun eval(expr: Expr): Int =
when (expr) {
is Num -> expr.value
is Sum -> eval(expr.left) + eval(expr.right)
else -> throw IllegalArgumentException(“Unknown expression”)
}

interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Exp

元記事を表示

FusedLocationProviderClientがclassからinterfaceになった。ライブラリとのバージョン不一致に気をつけろ

com.google.android.gms:play-services-location:21.0.0にて、`FusedLocationProviderClient`, `ActivityRecognitionClient`, `GeofencingClient`, `SettingsClient`がclassからinterfaceに変わったらしいです。

https://developers.google.com/android/guides/releases
> `FusedLocationProviderClient`, `ActivityRecognitionClient`, `GeofencingClient` and `SettingsClient` are now interfaces instead of classes, which helps enforce correct usage and improves testability.

20.0.0 までの`FusedLocationProviderClient`の使い方は以下のような形かと思います。

“`

元記事を表示

Android端末で画面回転のイラッを解決する

# はじめに
スマートフォンで写真や動画を見ているときに、写真や動画の向きを画面にあわせるのにイラッとしたことはありませんか?
そんな時に、スマフォを振るだけで横向き固定・縦向き固定に強制する方法です。
Youtubeアプリでも、動画を横向き再生画面と、縦向きの説明やコメント画面を容易に切り替えることが出来ます。

# 方法
MacroDroid というデバイス自動化アプリを使用します
https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid

以下のようなマクロを2つ登録します
### 画面回転
端末の自動回転がOffの時に、端末をシェイクすると
横画面⇔縦画面 のトグルで画面を回転させ固定します。
詳しい設定方法や解説は、ここでは説明しません。
あくまで、「こんな便利なことが出来ますよ」というのが、この投稿の趣旨です。
ただし、少しだけ解説すると縦と横のトグルを実現するために、ユーザ定義変数x(変数名は任意)を定義して実行のたびにTrueとF

元記事を表示

Androidジェスチャーナビゲーションエリアの背景色変更方法

今回はジェスチャーナビゲーションエリアの背景色を変更してみたいと思います。

ジェスチャーナビゲーションエリアとはどこかというと、下の黒の部分です。

![Screenshot_20221026_124713.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/350602ac-7506-e6b0-ba91-382db89a1a9e.png)

こちらの色を変更していきます!

※Android 10(API レベル 29)以降の Android 対象です。

公式

https://developer.android.com/training/gestures/gesturenav?hl=ja#edge-to-edge

# ジェスチャーナビゲーションエリアの背景色変更方法

“` values-v29/themes.xml