- 1. unityで作成したアプリとfirebaseを接続し、Android実機でテストする方法
- 2. 画面遷移のアニメーション再生時間を利用したAndroidのアプリ制限の突破
- 3. Android端末に直接apkとobbをインストールする方法
- 4. Jetpack ComposeでInstagram Home作った
- 5. Booleanとオブジェクトのリストを持つデータクラスのParcelableを実装する
- 6. ファーウェイ端末であるかどうか判断する方法
- 7. Androidアプリにおける フラグメントトランザクション
- 8. 【Kotlin研修14日目】CoordinatorLayoutを利用したスクロールと連動するツールバー・FABの実装
- 9. 【Kotlin研修14日目】マテリアルデザインとテーマファイルの定義
- 10. Android個人開発者におすすめするアプリコンテスト(賞金総額はUS$1,000,000)
- 11. EMUIバージョンの取得方法
- 12. 【Kotlin研修13日目】暗黙的インテントを利用したカメラ機能の実装
- 13. DaggerのAssisted Injectを楽にするクラスと拡張関数を作った
- 14. iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(3/3 ライブラリ使い方編)
- 15. iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう(2/3 実装方針編)
- 16. 双方向性マップ
- 17. Kotlin Flowを使ってみた[Android, Kotlin]
- 18. Unity 2020で作ったAndroidアプリからFireBaseに繋ぐ時の苦労したからまとめといた
- 19. 【Kotlin研修12日目】FusedLocationProviderClientを利用した位置情報の取得
- 20. AndroidタブレットのChromeの「PC版サイト」の設定が勝手にオンになる
unityで作成したアプリとfirebaseを接続し、Android実機でテストする方法
# unityで作成したアプリとfirebaseを接続する
Firebase公式のドキュメント[Unity プロジェクトに Firebase を追加する](https://firebase.google.com/docs/unity/setup)があるにあるのですが、いまいちわかりにくいので、健忘録がてらまとめました。##Androidのbuild環境を設定し、プレイヤーセッティングへ
[![Image from Gyazo](https://i.gyazo.com/03571c86918b70734e350722aaeae3f8.png)](https://gyazo.com/03571c86918b70734e350722aaeae3f8)##カンパニーネームとプロダクトネームをユニークなものに設定する
[![Image from Gyazo](https://i.gyazo.com/0dbe2043c2cfd5cc34413aee3506cdb3.png)](https://gyazo.com/0dbe2043c2cfd5cc34413aee3506cdb3)##P
画面遷移のアニメーション再生時間を利用したAndroidのアプリ制限の突破
Androidが別のアプリに遷移するときのアニメーション再生時の制限との僅かなラグをを利用した安心フィルター等のアプリ制限の突破の方法です。
# はじめに
この記事はアプリ制限を突破することを目的としているわけではなく、Androidベースのosやフィルターアプリ等の開発者の方に突破の手段があることを伝えることが目的です。
またこれを書いている人は特に専門的な技術、知識を持っていない高校生です。調べたら誰でもできることだと思います。故に間違い、タブー等を犯していることもあると思います。大目に見てください。## 環境
今回成功した環境です。
### スマホ側
– OPPO Reno3 A
– Android 11 ベースのos ColorOS V11
– モデル CPH2013 (←?)
– あんしんフィルター for UQ mobile### PC側
– Windows 10 Home
– Android Debug Bridge version 1.0.41おそらく必要ない情報も含まれています。念の為です。
# 大まかな方法
1. アニメーション時のラグを利用し設定から
Android端末に直接apkとobbをインストールする方法
今回は書き出したapkとobbをインストールする方法を記載いたします。
adbコマンドのPathを通す
===
公式サイトにアクセスして`SDK Platform-Tools`をダウンロードし
Zipファイル解凍し、個人のPathを保存している場所に移動しましょう。
(C:直下でも大丈夫です。)[SDK Platform-Tools](https://developer.android.com/studio/releases/platform-tools)
解凍が完了したらシステム環境変数に解凍したフォルダを追加しておきます。
コマンドプロンプトなどでadbとコマンドを入力し、
adbコマンドの説明が出れば成功です。apkとobbをインストールする
===
Androidは開発者向けオプションでUSBデバッグを有効にしておき、PCとAndroidをUSB接続しましょう。その後コマンドプロンプトでapkとobbを置いてあるフィルダに移動し、下記のコマンドを入力しましょう。
“`
adb install {パッケージ名}.apk
“`続いてobbがある場合
Jetpack ComposeでInstagram Home作った
# つくったもの
![device-2021-06-16-232127.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185927/72f07b7b-7891-cd5f-4f0d-b0a0e8c0dc66.gif)# 実装内容
## 画面全体
画面自体はScreenという単位で`Scaffold`で囲って作っています。その`Scaffold`に`topBar`を設定していることで上の`TopAppBar`が表示されています。
`TopAppBar`には`navigationIcon`と`title`用のComposableを設定できて、これらを設定していることで戻るボタンやタイトルのテキストが表示されています。“`kotlin
Scaffold(
topBar = {
val title = stringResource(id = R.string.home_instagram_home_section_title)
To
Booleanとオブジェクトのリストを持つデータクラスのParcelableを実装する
## Parcelableとは?
– 状態を一時的に保存して欲しいオブジェクトが実装すべきインターフェイス
– `Parcelable`を実装したオブジェクトは、`Intent`を使って`Activity`間でやり取り出来る## Parcelableの実装
`Note`というデータクラスを使って`Parcelable`を実装してみます。
“`kotlin
data class Note(
val id: Int,
val title: String,
val createdAt: Date,
val isDeleted: Boolean,
val pages: List
) : Parcelable {override fun describeContents(): Int = 0
override fun writeToParcel(dest: Parcel?, flags: Int) {
dest?.run {
writeInt(id)
ファーウェイ端末であるかどうか判断する方法
ファーウェイ端末であるかどうか判断するソースコードは次の通りです。
“`java
public class HuaweiUtil {public static String getManufacturer() {
try {
Class> classType = Class.forName(“android.os.SystemProperties”);
Method getMethod = classType.getDeclaredMethod(“get”, new Class>[]{String.class});
return (String) getMethod.invoke(classType, new Object[] {“ro.product.manufacturer”});
} catch (InvocationTargetException e) {
e.printStackTrace();
} catc
Androidアプリにおける フラグメントトランザクション
#フラグメントトランザクション
用語から解説していきます。
>**フラグメント**とは、簡単にいうと、コンテンツとライフサイクルを持ったビューです。
>**トランザクション**とは、複数の処理を1セットとする考え方です。よくある例が、口座の振り込み処理。「Aが払う、Bがもらう」で1セットの考え方。フラグメントの追加、削除では、データベースへのデータの追加、削除と似た“フラグメントトランザクション“という考え方をします。
同一アクティビティ上に、フラグメントが存在し得る時などに必要となってきます。
例えば、左半分にリストデータがあり、右半分にリストデータをタップした時に表示されるフラグメントがある時などです。#使い方手順
1,FragmentTransactionオブジェクトを取得
2,対象Fragmentオブジェクトを生成、もしくは取得する。
3,フラグメントの追加/削除/置き換え処理を行う
4,コミットする##1,FragmentTransactionオブジェクトを取得
“FragmentTransaction“とは、一連のフラグメント操作を実行するた
【Kotlin研修14日目】CoordinatorLayoutを利用したスクロールと連動するツールバー・FABの実装
# アクションバーとツールバー
[参考: 研修4日目(アクションバー)](https://qiita.com/b150005/items/1f58b3418bb1690c2f4b#%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%90%E3%83%BC)## アクションバー
`アクティビティ`のタイトルや`アクション`を視覚的に表現する、**アプリ上部**に表示されるバー。![アクションバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/377648aa-dd0b-f85e-ef5e-22790fd2f460.png)
## ツールバー
`アクティビティ`のタイトルや`アクション`を視覚的に表現するバー。
`レイアウトファイル`(=`activity_main.xml`)に記述して`ビュー`として定義できるため、`アクションバー`に比べて柔軟性に富む。![ツールバー.png](https://qiita-image-s
【Kotlin研修14日目】マテリアルデザインとテーマファイルの定義
# マテリアルデザインとテーマファイル
[参考: Introduction](https://material.io/design/introduction)
`マテリアルデザイン`とは、`Google`が発表した`UI設計`に関するガイドラインであり、以下の**3原則**を遵守する。* 物質とは象徴である
> 画面は`2次元`であるが、`UI部品`を物質として扱うことで`3次元`的に配置する。
* 大胆で、生動的で、計画的である
> `印刷デザイン手法`に基づき、タイポグラフィや配置、色を工夫することで、`ユーザ`に没入体験を持たせる。
* 動きには意図がある
> `UI部品`の役割に応じた動きをつけることで、`ユーザ`に継続的に集中させる。
`Android OS`も`Google`が開発したOSであるため、標準で`マテリアルデザイン`に基づいて設計されている。
`文字スタイル`や`配色`を定義する`テーマファイル`(=`themes.xml`)においても、
`マテリアルデザイン`に準拠したものになるよう、注意する必要がある。## マテリアルテーマ
`マテリア
Android個人開発者におすすめするアプリコンテスト(賞金総額はUS$1,000,000)
# [Apps UP 2021](https://developer.huawei.com/consumer/en/activity/digixActivity/digixdetail/101618451100197545) の概要
https://developer.huawei.com/consumer/en/activity/digixActivity/digixdetail/101618451100197545
## 背景
ファーウェイは世界各地のエンジニアと共にデジタルトランスフォーメーションを推進し、HMS キットを用いて、世界の消費者に次世代のIoT 体験を提供します。– 合計賞金が100万ドル
– HMS開発者が400万人以上
– HMSアプリ数が134,000以上
– 国と地域が170個以上![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/1b18e7a6-17dd-5278-7f9e-b69d7e5a98f6.png)
## 地区
大会はアジア
EMUIバージョンの取得方法
EMUIはファーウェイがAndroidをベースにカスタマイズしたものです。プログラムでは次の方法でEMUIのバージョンを取得できます。
“`java
public class EmuiInfo {public static EmuiInfo getEMUI() {
EmuiInfo.Builder builder = new EmuiInfo.Builder();
try {
Class> classType = Class.forName(“android.os.SystemProperties”);
Method getMethod = classType.getDeclaredMethod(“get”, new Class>[]{String.class});
String buildVersion = (String) getMethod.invoke(classType, new Object[]{“ro.build.version.emui”});
【Kotlin研修13日目】暗黙的インテントを利用したカメラ機能の実装
# カメラ機能の実装
`カメラ機能`を実装する方法は、以下の2通り。> 1. `暗黙的インテント`によるOS標準の`「カメラ」アプリ`の利用
> 2. `android.hardware.camera2`APIによる`カメラ機能`の作成# 暗黙的インテントを利用したカメラ機能の実装
[参考: 研修11日目](https://qiita.com/b150005/items/a0053b66b28e16967270)
`暗黙的インテント`を用いて`カメラ機能`を実装する手順は、以下の通り。> 1. `マニフェストファイル`に端末の`ストレージ`を利用するための`パーミッション`を付与
> 2. 撮影した`画像ファイル名`が**一意**となるよう、`SimpleDateFormat`を用いて`日時フォーマッタ`を作成
> 3. `ストレージ`に格納する`画像ファイル名`・`ファイル形式`を指定
> 4. `ContentResolver`を用いてデータの`格納先URI`を作成
> 5. `暗黙的インテント`を用いてOS標準の`「カメラ」アプリ`を起動
> 6. `遷移元アクティビ
DaggerのAssisted Injectを楽にするクラスと拡張関数を作った
# はじめに
DaggerのAssisted Inject、便利ですよね。
私はDagger-Hiltで利用していますが、ViewModelにコンストラクタInjectionできるので重宝しています。
しかし、ViewModelで利用する場合、FactoryとそれをProvideする(companion objectの)関数を書く必要がありますが、ボイラプレートがあると感じたので、クラスと拡張関数を用いて実装を楽にしてみました。
Assisted Injectの対象引数が一つの場合にしか使えませんが、data class化するなど一つにまとめれば、実質複数の値を渡せるので、汎用性はあるのではないかと思います。# 確認環境
確認した環境は以下の通りです。“`kotlin
Dagger-Hilt : 2.35.1
Kotlin : 1.5.10
AGP : 4.2.1
“`# ViewModel向けの便利クラス
関数を共通interfaceとして切り出すことで、無駄をなくします。## 使う側
先にメリットが分かるほうが良いと思うので、まずは利用側から。### Bef
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_