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

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

StateFlow で EventBus を実現する

## はじめに

今回は Android で簡易的な EventBus の実装方法として、StateFlow を使ったイベント通知実装を紹介したいと思います。

背景としては、私の担当するプロジェクトでアプリケーションの Foregroud、Backgroud を検知で実現する機能を実装する上で今回の実装が必要になったことにあります。Android の EventBus としては [EventBus](https://github.com/greenrobot/EventBus) などのライブラリを利用する方法もあるのですが、ライブラリ導入はその後のメンテナンスコストや脆弱性が生じる可能性も考慮する必要があります。また、ライブラリの導入は、今回実現したかった機能に対してオーバースペックだったため、チームとして独自実装で実現することにしました。

## まず考えたこと

まず最初に大まかな実現方法をイメージしてみました。

1. Application Class で Foreground, Background を監視する
1. Singleton で状態管理するクラスを作る
1. A

元記事を表示

【Android】Some kotlin libraries attached to this project were compiled with a newer Kotlin compiler and can’t be read. Please update kotlin plugin. が出る(自分用メモ)

## エラーとの出会い
これから新しいアプリを作ろうと思い、build.gradleの依存関係をある程度整え、Activityファイルの実装に移ろうとしたところで妙な警告が画面上部に出ているのを発見しました。

![IMG_8701 2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1274260/3b37a478-1bfa-ccef-0a47-008f88af20e5.jpeg)

“`Some kotlin libraries attached to this project were compiled with a newer Kotlin compiler and can’t be read. Please update kotlin plugin.  No updates found.“`

kotlinライブラリが読み込めないのでkotlinプラグインをアップデートしてくださいとのこと。なのにその隣にはNo updates found.とか書いてあります。アップデートしてくださいと言わ

元記事を表示

Jetpack Compose Navigation(Navigation Arguments, Nested Navigation)

#目次

1. Navigation Arguments, Nested Navigationとは
2. サンプルコード
3. まとめ

##1. Navigation Arguments, Nested Navigationとは

“Navigation Arguments“‥画面遷移時に、画面間で共有できる値。この値は、**{ } (プレースホルダ)**を用い、**arguments**を**型を指定してlist**で管理できます。また、SavedStateHandleを使って、画面遷移時に必要なargumentsを取得できますが、今回は説明を省きます。

**以下の実装を行います(UIの詳細については説明を省きます。)**

![navigation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512202/c71d4ece-6d36-fa0b-f634-51d726af14d8.gif)

“Nested Navigation“‥デスティネーションを、モジュール化すること。**Na

元記事を表示

Android プロジェクトの未使用リソースをコマンドラインや CI で削除する (Remove Unused Resources Plugin)

Android プロジェクトの未使用リソースを一括で削除する Gradle Plugin を公開しました。このプラグインのメリットや使い方を解説します。

# Remove Unused Resources Plugin for Android

Remove Unused Resources Plugin により、Gradle Task から Android の未使用リソースを削除できるようになります。

https://github.com/irgaly/android-remove-unused-resources-plugin

## 特徴やメリット

* Android Lint `UnusedResources` ルールの実行結果 `lint-results.xml` をもとにリソースの削除を実行します
* 未使用リソースの検出は Android Lint に任せているため、Android Studio の `Refactor > Remove Unused Resources…` メニューと同じ結果を期待できます

![Android Studio の Re

元記事を表示

【Android】ResultAPI を使って実行時権限をリクエストしてみる

AndroidX に追加された ResultAPI を使って実行時権限をリクエストする処理を書き方をご紹介したいと思います。

## ResultAPI とは
ResultAPI とは、androidx.activity のバージョン 1.2.0-alpha02 と androidx.fragment のバージョン 1.3.0-alpha02 で追加された API です。

これを使うことで非推奨となった “`onActivityResult“` や “`onPermissionRequest“` などの処理を置き換えるとともに簡潔に書き直すことができるようになります。

今回は “`onPermissionRequest“` が実現できる実行時権限をリクエストしてその結果を受け取る処理を ResultAPI を使って書いていきたいと思います。

## 環境
Android Studio:2020.3.1 Patch 4
kotlin:1.5.31
targetSdkVersion:31
minSdkVersion:27

## 準備
まずは gradle にライブラリを追

元記事を表示

Android StudioのGitウインドウにLocal Changesタブを表示させる方法

# 手順
Preferences > Version Control > Commit
Use non-modal commit interface のチェックを外す

元記事を表示

Google Play のデータセーフティセクションのあれこれ

2022年4月までにGoogle Playに公開されている全てのアプリに対応が求められている「データ セーフティ フォームの回答」を頑張るためのあれこれをまとめておきます。

# はじめに

備忘録なので期待しないで。

当初は「データセーフティフォーム」と呼ばれていたけどいつの間にか「データセーフティセクション」になっていてよくよく見ると「データ セーフティ セクション」が正式な表記だったりした。

# 収集(collect)と共有(share)

一般的な「収集」と「共有」とは違う用語なので注意。

[Google Play のデータ セーフティ セクションの情報を提供する \- Play Console ヘルプ](https://support.google.com/googleplay/android-developer/answer/10787469?hl=ja) より抜粋。

– **「収集」**とは、ユーザーのデバイス外にアプリからデータを送信することを意味します。
– **デバイス上でのアクセス / 処理**: アプリがアクセスするが、ユーザーのデバイス上でロ

元記事を表示

Jetpack Compose Modifier(修飾)

#目次

1. Modifierとは
2. サンプルコード
3. まとめ

##1. Modifierとは

“Modifier“‥コンポーザブルを修飾する、もしくは拡張するときに利用する。
このクラス関数を連鎖させてコンポーズを作成することが可能です。

では、実際にどのようなことができるかを確認してみましょう。

**1. コンポーザブルのレイアウト、動作を変更できる**
**2. UIの要素をクリック可能、スクロール可能、ドラッグ可能にできる**

では、実際にサンプルコードを通して確認してみましょう。

##2. サンプルコード

Background Color

“`
Box(
contentAlignment = Alignment.Center
) {

Text(
text = “Modifier Example”,
modifier = Modifier
.background(Color.Red)
)
}
“`

元記事を表示

【Android】AndroidManfestでよく見るタグについてゆるふわまとめ(自分用メモ)

## はじめに
とっても大事なのに意外に触る機会が多いわけでもないAndroidManifestファイル。たまに触ると何が何だか分からなかったので、また触るときにテンパらないように軽くまとめてみようと思います。
初心者ゆえに実際に触ったことがないタグも多いため、そのような箇所はかなりざっくりと書いています。あらかじめご了承ください。
もし間違いなどありましたらご指摘いただけますと幸いです。

## 実行環境

| 項目 | 情報 |
| —— | —————————- |
| PC | MacBook Pro (14-inch,2021) |
| CPU | Apple M1 Pro 10-core |
| GPU | Apple M1 Pro 16-core |
| OS | macOS Monterey (12.0.1)
|
| An

元記事を表示

flutter android バージョン コード 1 の apk が既に存在するため、別のバージョン コードを使用する必要があります

## 再申請の際にaabファイルをアップロードするとエラー

`バージョン コード 1 の apk が既に存在するため、別のバージョン コードを使用する必要があります。`

以下の記事でandroid/app/build.gradleのversioncodeとversionnameを変更したらいけると思ってました。

https://smot93516.hatenablog.jp/entry/2018/05/21/140558

それではflutterでは、うまくいきませんでした。なので、以下の記事を参考に
pubspec.ymlの+1を+2に変えて、`flutter clean`のあとに`flutter build appbundle –flavor prod -t lib/main-prod.dart` を実行しました。

“`:pubspec.yml
# version: 1.0.0+1
version: 1.0.0+2
“`

https://qiita.com/zb185423/items/2a7b49c32b817049cf2d

元記事を表示

[Kotlin]ずっと分からなかったsealedクラスを掘り下げる

##はじめに
Kotlinに`sealed`クラスという機能があります、度々見たり、周りのAndroiderが公用語のごとく使っていて、自分は分かったふりをしていました・・・

ここで掘り下げておきます。

##`sealed`クラスを端的に
一言で表すと、「制限」。
何を制限するかと言いますと、下記の様にマークされたクラスは継承を制限することを明示します。

制限されていても、継承できる場合は下記です。

– `sealed`クラスのネスト内
– 同じファイル内

“`kotlin:Sonic.kt
sealed class Sonic {
class Shadow: Sonic()
class Tails: Sonic()
class Knuckles: Sonic()
}

class EggMan: Sonic()
“`

“`kotlin:Other.kt
class Other : Sonic() // error
“`

##メリット
`enum`とかなり似てるなと思いました。
そことの違いを含めて`sealed`クラスのメリットをい

元記事を表示

[Android]Coroutinesキーワード一覧

##はじめに

https://star-zero.medium.com/2022%E5%B9%B41%E6%9C%88%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bandroid%E9%96%8B%E7%99%BA%E7%8A%B6%E6%B3%81-86ccc6cf925c

AndroidではCoroutinesが大分浸透してきたので、掘り下げてみたいなと思います。
とはいえ非同期プログラミングの話になると、結構??なワードが出てきてコードの理解の妨げになります。

ここでは、Coroutinesにまつわるワードを一覧とその解説によってその悩みを解消する記事にしたいと思います。

##Coroutinesって?
Androidでは、お馴染みの並行した実行処理を実現するデザインパターンです。
Kotlinが言語レベルでのサポートをしてくれています。

これによりUIスレッドから切り離して重めの処理を行い、ブロッキングを回避することができます。

##関連キーワード一覧
###スレッド
処理の「流れ」。
深ぼり過ぎると二度とこの世に戻ってこれないので、これく

元記事を表示

Jetpack Compose Navigation(BottomNavigation)

#目次
1. Navigationとは
2. サンプルコード
3. まとめ

##紹介する実装内容
![bottomScreen.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512202/95727262-db9e-1117-8bb7-e16b9312cd21.gif)

##1. Navigationとは

この記事は、[Jetpack Compose Scaffold(BottomNavigation UI)](https://qiita.com/Ryosuke-Android/items/2a94d4fed2586c0ed31c)で構築したUIをもとに、Navigationを実装するので、UIの説明は省略させていただきます。

“NavHost“‥**rememberNavController**を渡し、**NavController**のサブクラスである**NavHostController**でステートを管理します。
また、“NavGraphBuilder“を用いて、**navgr

元記事を表示

Jetpack Compose Scaffold(BottomNavigation UI)

#目次
1. Scaffoldとは
2. サンプルコード
3. まとめ

##1. Scaffoldとは

“Scaffold“‥マテリアル コンポーネントを、一般的な画面のパターンに組み合わせ、例アクトを構築することができる。**Scaffold**には、後置ラムダスロット**content**があり、“RowScope“を利用することで、UIの要素を横並びの一列に配置することができる。**TopAppBar、BottomAppBar、FloatingActionButton、Drawer**などを実装することができる。

**後置ラムダスロット**‥コンポーザブルなコンテンツを引数として受け入れ、それをUIの要素として利用することができる汎用ラムダのこと

今回は、以下のBottomNavigationを作成していきたいと思います。
![bottomScreen.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512202/16bcdd9b-200d-7827-a58f-ff2d7cda1f

元記事を表示

【Android】FragmentContainerViewについてゆるふわまとめ(自分用メモ)

## はじめに
業務で触るコードは1Activity多Fragmentという構造がほとんどのため、久々にFragmentContainerViewを使ったら書き方を綺麗さっぱり忘れていました。この調子だと次に使う時も一から調べ直しになってしまいそうなので、ゆるっとふわっとまとめてみます。
※この記事ではFragmentContainerViewとnavigationを併用する前提で書き進めていきます。
※navigationの詳細な使い方などは~~めんどくさい~~簡潔さを重視するため、この記事では踏み込みません。

## 実行環境

| 項目 | 情報 |
| —— | —————————- |
| PC | MacBook Pro (14-inch,2021) |
| CPU | Apple M1 Pro 10-core |
| GPU | Apple M1 Pro 16-core

元記事を表示

android 通知 Kotlin

#はじめに

アプリ画面のボタンを押下すると通知が届く様にする
※コード以外省略

###実装

“` Kotlin:MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)
val channelId = “channel_id”
val channelName = “channel_name”
val channelDescription = “channel_description ”
val notificationButton = findViewById

元記事を表示

Kotlinデビューしたくて環境構築してみた

# はじめに
Kotlinを触ってみたくなったので、環境構築をしてみました。
実際に動かすのは、今後になる予定です。

# 環境構築(Windows)
## JDKのインストールをする

1.公式サイトからJDKをダウンロードする
https://www.oracle.com/java/technologies/downloads/#jdk17-windows

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/e268999c-43d7-70a0-086f-3aab9ca40368.png)

2.インストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/64ba3798-24b6-6f5a-48cb-e2a390fd40db.png)

3.環境変数の設定をする

「スタートメニュー」>「設定」>「システム」>「詳細情報」>「システムの詳細設定」>「環

元記事を表示

全画面表示時のview崩れ対策

#はじめに
今回、自分はStatusBarを透過させた状態でViewをStatusBarに被せて表示をさせる際に、単一Activity複数Fragmentで実装していたため、動的にStatusBarの状態を変更していたところ、被せて表示させていない画面から被せて表示させたい画面に遷移し、その後被せて表示させていない画面に戻ったとき、BottomNavigationのViewが大幅に崩れてしまっていたため、その解決策を備忘録として置いておきます。

###実装状態
まず、自分の場合に行っていたStatusBarの透過処理とViewの被せて表示する方法を記述しておきます。

“`kotlin:
// 画面全体表示設定trueの場合被らず表示、falseの場合被せて表示
WindowCompat.setDecorFitsSystemWindows(window, true)
// StatusBarの文字色を変更trueの場合白、falseの場合グレー
val wic = WindowInsetsControllerCompat(window, window

元記事を表示

Jetpack Composeの基礎

#目次
1. Column, Row, Box
2. サンプルコード
3. まとめ

##1.Column, Row, Box

“Column“‥アイテムを画面上の垂直方向に配置するために使用する。
“Row“‥アイテムを画面上の水平方向に配置するために使用する。
“Box“‥アイテムをアイテムの上に配置するために使用する。

##2.サンプルコード

“Column“

“`
@Composable
fun UnderstandColumn() {
Column(
modifier = Modifier
.fillMaxSize()
) {

Surface(
modifier = Modifier
.width(150.dp)
.height(100.dp),
color = Color.Green

元記事を表示

【Android/kotlin】LiveDataについて雰囲気おさらい(自分用メモ)

## はじめに
LiveDataとかLifecycleOwnerとかよく聞くけどいまいちなんなのかが分からないので、めちゃくちゃふんわりまとめていきます。
理解が進み次第追記予定

## LiveDataとは
* データを保持してくれる箱みたいなやつ
* LiveDataと言いつつ、大体MutableLiveDataかObservableFieldを使う
* MutableLiveData→必要な時のみ監視し、別途LifeCycleOwnerを設定する必要がある
* ObservableField→常に変更を監視し続ける
* “` val count = MutableLiveData(“0”)“`みたいな感じで使う

## MutableLiveDataで必要になってくるLifecycleOwnerとは?
* 大体ActivityやFragmentをLifecycleOwnerに設定する
* ActivityやFragmentのライフサイクルに応じて変更を監視したりしなかったりする
* ActivityやFragmentがstopした時などは変更

元記事を表示

OTHERカテゴリの最新記事