Android関連のことを調べてみた2021年06月21日

Android関連のことを調べてみた2021年06月21日
目次

iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(3/3 ライブラリ使い方編)

– [iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(1/3 考え方編)](https://qiita.com/KazaKago/items/1d6477b8d4dc628522e7)
– [iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(2/3 実装方針編)](https://qiita.com/KazaKago/items/213bd4fd0072fb433937)
– [iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(3/3 ライブラリ使い方編)](https://qiita.com/KazaKago/items/63d9c5fb232054dfa8ab) ← **いまここ**

# 前置き

[前回](https://qiita.com/KazaKago/items/1d6477b8d4dc628522e7)、[前々回](https://qiita.com/KazaKago/items/213bd4fd0072fb433937)とモバイルアプ

元記事を表示

iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(2/3 実装方針編)

– [iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(1/3 考え方編)](https://qiita.com/KazaKago/items/1d6477b8d4dc628522e7)
– [iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(2/3 実装方針編)](https://qiita.com/KazaKago/items/213bd4fd0072fb433937) ← **いまここ**
– [iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(3/3 ライブラリ使い方編)](https://qiita.com/KazaKago/items/63d9c5fb232054dfa8ab)

# 前置き

前回「[iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(1/3 考え方編)](https://qiita.com/KazaKago/items/1d6477b8d4dc628522e7)」という記事を書きまし

元記事を表示

双方向性マップ

この記事では、Androidで双方向性マップを使う方法について記載しています。(Javaでも使えます)

### 双方向性マップ
双方向性マップは、「keyを指定してvalueを取得する」だけでなく、「valueを指定してkeyを取得する」ことが出来ます。

### 使い方
双方向性マップのライブラリはいくつかあるようですが、ここではcom.google.guavaのBiMapを使います。
ライブラリは、MavenまたはGradleで依存関係を指定することで使用できます。

“`
dependencies {
implementation(“com.google.guava:guava:30.1.1-android”)
// Javaの場合は 30.1.1-jre
}
“`

「valueを指定してkeyを取得する」場合は、inverseメソッドをコールすることで、keyとvalueが反転したMapが取得できます。

“`kotlin
val userId: BiMap = HashBiMap.create()
userId.pu

元記事を表示

Kotlin Flowを使ってみた[Android, Kotlin]

#やったこと
Firebase Authenticationで作成したアカウントを、ユーザーが削除できる機能を作りました。その際削除が成功したかによってToastを表示したいと思い以下のように実装しました。

1 Repositoryでアカウントを削除
2 ViewModelの isDeleteUser : Flow に削除が成功したかを格納
3 Fragmentで isDeleteUser : Flow の値を収集してToast表示

# Repository
“`kotlin:Repository.kt
//削除が成功したかどうかを受け取ってViewModelに返します
suspend fun deleteUser(): Boolean {
val result = deleteUserFun().getOrThrow()
if(result) return true
else {
Log.e(“Error”, result.toString())

元記事を表示

Unity 2020で作ったAndroidアプリからFireBaseに繋ぐ時の苦労したからまとめといた

# この記事で解決できること
Unityでアンドロイドアプリを作成していて、Google Cloud Platformに
接続する時に何故かUnity2020では送信できなくって困った。
その原因と解決策をまとめているので、一助になれば幸いっす。

# 事象
## 環境
・**MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)**
OS:BigSur 11.2.3
・**Unity**
version:2020.3.7f1
target Platform:Android
target SDK:22
・**FireBase**
version 6.1.1

## 問題が起こったストーリー
今まで、Unity2019(1.5f)を中心に開発をしていたが、新規アプリ開発するにあたり、Unity2020(3.7f)をPJとして採用し、開発をスタート。
アプリ開発終盤に、Google Analyticsで利用ログを簡単に分析したいとの要件に対応すべく、他PJと同じように実装した。
1. FireBaseSDKとGoogle-Serv

元記事を表示

【Kotlin研修12日目】FusedLocationProviderClientを利用した位置情報の取得

# 位置情報の取得
[参考1: Kotlinを使用したAndroid端末の位置情報取得](https://codelabs.developers.google.com/codelabs/while-in-use-location/?hl=ja#0)
[参考2: 位置情報を取得する仕組み](https://www.atmarkit.co.jp/ait/articles/0902/12/news135.html)
**現在**の`位置情報`の`プロバイダ`は、`GPS`・`IPアドレス`・`無線APのMACアドレス`の3つ。

`FusedLocationProviderClient`を用いることで、利用する`プロバイダ`を自動で選択しながら`位置情報`を取得することができる。

## FusedLocationProviderClient
`Google`が公開する`Google Play Service`(=`API`)が提供する`Location`ライブラリに含まれる、
`位置情報`の**取得**を行うメソッドを定義するクラス。

`FusedLocationProviderClie

元記事を表示

AndroidタブレットのChromeの「PC版サイト」の設定が勝手にオンになる

# 2021年6月初頭から、なぜかAndroidタブレットのChromeで「PC版サイト」がオンになる謎現象が発生
### 現象:いままでオフだったのに、常に「PC版サイト」がオンになる
![2021_06_18_20.29.39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41095/70c1d9f7-5550-4a95-29f9-af96ee896f6c.jpeg)

### 解消方法の手順1:chrome://flagsで検索
`chrome://flags` にアクセスして、「Request desktop site for tablets on Android」を検索する
プルダウンメニューは以下の4種類

「Default(自動的にデスクトップ版をリクエストする)」 変更経緯は、※1を参照
「Enable(自動的にデスクトップ版をリクエストする)」
「Enable for xxxDPI+ Screens(最小の画面サイズを選択する)」
「Disable(無効)」
![2021_06_18_

元記事を表示

unityアプリ(standalone, androidスマホ, OculusQuest2)でc++ライブラリを使う

Linux standalone、Android、Oculus Quest 2用のUnityアプリで、c++ライブラリを使う方法を説明します。
standaloneとAndroidについては、unity公式に解説がありますが、わかりづらかったので使い方をまとめました。
アプリの内容は「c++ライブラリを使って計算した結果を表示する」という簡単なものです。

# 環境
– 開発環境 + standaloneアプリ環境
– ubuntu 16.04
– c++ライブラリ
– c++ 11
– cmake
– unity
– 2019.4.17f1
– Androidスマホ
– xperia 5
– Oculus Quest 2

# C++ライブラリの開発
初めにC++ライブラリを開発します。

## ライブラリ
今回はテスト目的なので、引数で渡された2つの整数を加算する、という簡単なライブラリを開発しました。
クラス内のでのインスタンス生成と、その関数呼び出しを試したかったので、2つのクラスを用意し、1つの

元記事を表示

AndroidでFlowをcollectするのをちょっとだけ楽にする

Androidで`Flow`を扱う際の小ネタです。

# 前置き

Android+Kotlinで`StateFlow`や`SharedFlow`などを`LiveData`代わりに利用する際は、
主に`Activity`/`Fragment`上で`lifecycleScope.launchWhenStarted {}`などを使って`collect {}`を実行することが多いと思います。
その際、`LiveData`に比べてコルーチンスコープを開始する関係上ネストが一段深くなってしまいます。

“`kotlin:Activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

lifecycleScope.launchWhenStarted {
viewModel.flow.collect {
binding.textView.text = it
}

元記事を表示

[2020/06] Google Play Console での新規リリース時にわからなかったこと

Google Play Consoleで新規アプリをリリースする際に、公式ドキュメントを読んでも不明確な箇所があったので問い合わせました。
ポイントだけまとめておきます。

※2020/06時点の情報なので、今後変更される可能性があります。

## 1. テスト版で審査通過した場合、製品版で審査をスキップできるのか

-> スキップはされないが、一部の審査項目は短縮されるようです。

古い情報だと「審査がスキップされる」といった記事もありましたが、現時点だと再度審査が入るようです。

## 2. 初回リリース時に手動で公開することができるのか

-> 一定の手順を踏めば利用可能なようです。

要は「管理対象の公開機能」が初回リリース時に利用できるのかという話になりますが、
以下の公式のドキュメントには、初めてアプリを公開する場合には利用不可能といった記載があります。
> 管理対象の公開機能を使用するには、アプリを先に公開しておく必要があります。初めてアプリを公開するときには使用できません。

https://support.google.com/googleplay/android-d

元記事を表示

Play Asset Deliveryを使ってみた

「apk + 拡張ファイル」でアプリを公開していたのですが、aab対応が必要になり拡張ファイルは使えないので代替機能として何かないか確認したらPlay Asset Deliveryが該当したので試してみました。

150MBを超えるアプリを公開することは稀だと思いますが、参考にする記事がかなり少なかったのでこれから使ってみようと考えている人の助けになれば幸いです。

## 動作確認環境
Macbook Pro macOS Catarina 10.15.7
Android Gradle Plugin 4.1.3
AndroidStudio 4.1.3
Pixel3 Android OS 11

#1 PlayCoreLibraryの導入

“`
// In your app’s build.gradle file:

dependencies {
// For Kotlin users also import the Kotlin extensions library for Play Core:
implementation(“com.google.androi

元記事を表示

Android Studio + kotlin + SQLiteで音符フラッシュカードアプリを作る ⑨タイムカウンターの実装(handler)

連載も半ばに差し掛かり、若干モチベーションが落ち気味でしたが、先日初めてフォローしていただけたので、俄然執筆意欲が湧きました!
あと半分、頑張って更新していきます。

#1.今回のテーマ

前回は回答ボタンを押したときの処理を実装しました。
今回は、タイムカウンターの実装です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619303/4c474602-70c1-92e4-aa80-c1a71e2237f4.png)

xmlの定義は普通のTextViewです。

“`xml:activity_game

元記事を表示

[Android]思考停止で使っていたFragmentを少し掘り下げる

#粋がりのFragment
最初は、Activityにだけ処理を書いていた自分も、いつからかFragmentも使うようになりました。
ちょっとAndroid詳しくなっちゃった感じ?
と、肩に風を切るように開発を進めていますが、正直、Fragmentのことをそんなにわかっていません。
ということで、掘り下げていきましょう。

#Fragmentとは?
>Fragment は、FragmentActivity でのユーザー インターフェースの挙動や部位を表すものです。

相変わらず、ドキュメント先輩の威圧感半端ない。
何を言っているのか、ぱっと見わかりにくいです。

>1 つのアクティビティに複数のフラグメントを組み合わせてマルチペイン UI をビルドしたり、複数のアクティビティでフラグメントを再利用したりできます。

簡単に説明すると、Fragmentとは、「ピース」(パズルのね)みたいな画面です。
Activityという、画面の「枠」にはめて使います。

>フラグメントとは、アクティビティのモジュラー セクションのようなもので、独自のライフサイクルを持ち、独自の入力イベントを受信します

元記事を表示

[Android]思考停止で使っていたActivityを少し掘り下げてみる

#親の顔より見た
Androidの学習を始めて、最初に目にするコードがActivityに関するものではないかなと思います。
そんな、Activityですがそれとなく使っていても「なんなのかは正直わかってない」のが多くの人の現状だと思うので、今回はこちらを掘り下げていきたいと思います。

#Activityとは?
「画面」のことです。
使っていて、これは腑に落ちることだと思います。

ドキュメントを読んで、さらに深堀りしていきます。

>Activity クラスは Android アプリの重要なコンポーネントであり、アクティビティの開始方法と組み立て方法はプラットフォームのアプリケーション モデルを構成する際の基本的な要素です。

かなり重要そうですね。
Androidアプリを構成する骨格となるようです。
どう大事なのでしょうか?
アプリの構成について、このような記述があります。

>モバイルアプリのエクスペリエンスはパソコンと異なり、ユーザーの操作が必ずしも同じ場所で開始されるとは限りません。ユーザーの操作が定められた状態で開始されることはほとんどありません。たとえば、ホーム画面からメ

元記事を表示

WebエンジニアがAndroidの改修をやってみた〜画像を保存したいだけなのに〜

普段はLaravel/Vueを使ってるWebエンジニアです。
そんな自分にAndroidの改修依頼が舞い込んできました。

## 依頼タスク
「このAndroidアプリ、非推奨メソッド使ってるんだけどサポートいつ切れるかわからないから新しいのに変えたいんだよねー」
「なる。りょ。」

最初はメソッド置き換えればいいんでしょ?なんて軽く考えていた自分・・・

## 問題となった非推奨メソッド

[getExternalStorageDirectory()](https://developer.android.com/reference/android/os/Environment#getExternalStorageDirectory())
確かに`This method was deprecated in API level 29.`って書いてる。
どうやら外部ストレージへのパスを取得する関数らしい。

【Android】getExternalStorageDirectory()について①

今回改修するアプリは素材画像ダウンロードの際にこのメソッドが使われていた。

## 代替手段1
似たような代わりのメソッドとして

元記事を表示

【Flutter2.0】カメラのプレビューが真っ黒で動かなくなった時の対処

こんにちは!
個人開発でアプリ開発をしているYuKiOです。

こんなアプリを開発しています。

元記事を表示

【Kotlin研修11日目】暗黙的インテントを用いたアプリケーション間の連携

# アプリケーション間の連携
[参考1: 他のアプリからのアクティビティの開始を許可する](https://developer.android.com/training/basics/intents/filters?hl=ja)
[参考2: 研修3日目](https://qiita.com/b150005/items/f2c1d8236ac5e9770f4f)
[参考3: 研修6日目](https://qiita.com/b150005/items/d72f35af46bc19a40f97)
[参考4: 研修11日目](https://qiita.com/b150005/items/2ed0ea9be1bddc942c01)
`アプリケーション`内部での`アクティビティ`や`フラグメント`、`サービス`間の連携(=`画面遷移`)は`インテント`を利用するが、`アプリケーション`間の連携においても`インテント`を利用する。

> ## インテント
> `アクティビティ`・`フラグメント`・`サービス`間の橋渡し役を担うクラス。
`遷移元`と`遷移先`の情報をもつ。

> `Intent`

元記事を表示

【Android / Kotlin】URL から拡張子を取得する

# はじめに
Android の開発にて
uriの最後の拡張子に応じて処理をハンドリングしたい、という場面がありました。

そのときのコードのメモ

拡張子の例として “xxx.html“ “xxx.png“ “xxx.jpg“ “xxx.pdf“ “xxx.zip“ などがあると思います。

### @sdkei さんにご指摘をいただき最後に補足をしております

# サンプルのURL
[港区役所](https://www.city.minato.tokyo.jp/shibamadochou/kurashi/todokede/juminhyo.html)のサイトURLを利用させていただきました。

今回で言うと、この最後の“html“の部分を取得したい。

“`
https://www.city.minato.tokyo.jp/shibamadochou/kurashi/todokede/juminhyo.html
“`

# パターン1
“`kotlin
val url = Uri.parse(“https://www.city.minato.tokyo

元記事を表示

Androidでのアニメーション

# アニメーションチュートリアルで出来るサンプルアニメーション

https://developer.android.com/training/animation

## ドローアブル グラフィックをアニメーションにする

その1

## アニメーションを使用してビューの表示 / 非表示を切り替える

![2-1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182351/9ab0e246-74dc-a84f-2668-27468b32944b.gif)

![2-2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182351/6b6b06b6-79db-f2b5-2f21-4eb8f0fb905b.gif)

![2-3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182351/518442fe-5962-d543-dfb0-2802

元記事を表示

AndroidStudio メニューリストのフラグメント化

#フラグメント
“Fragment“ は、“FragmentActivity“ でのユーザー インターフェースの挙動や部位を表すものです。

“フラグメント“を利用すると、同一のアプリでも、画面サイズによって画面構成を変えることが出来る。

例えば、スマホ画面では、2画面を画面遷移をしながら表示するのに対して、タブレットでは、2画面を画面の右側と、左側に分けて表示する。ということが出来る。
つまり、画面を1つの部品として扱うイメージ。![スクリーンショット 2021-06-17 14.34.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/ff30fe27-dfe8-d4ab-021b-4c559c0fb68a.png)
[参照](https://developer.android.com/guide/fragments)

画面の一部を独立したブロックとして扱えるのが“フラグメント“であり、
アクティビティ同様に画面構成を担う.xmlファイルと、処理を行うKotl

元記事を表示

OTHERカテゴリの最新記事