- 1. Android端末にHMS Coreをインストールする方法
- 2. KMM(Kotlin Multiplatform Mobile)は廃止され KMP(Kotlin Multiplatform)に統一されたよ
- 3. KotlinCoroutineでFirestoreにアクセスする
- 4. [Android]エラー: java.lang.SecurityException: No active admin
- 5. Android studio Export Project復元に注意
- 6. Android の端末の言語設定をコマンドで変更したい
- 7. 広告IDを特定の値に変更したい(rootが必要)
- 8. DJI Mavic 2 Pro を自作Androidアプリで自動操縦させる(3)~サンプルプログラムの実行(実行編)~
- 9. How to use YYSystem, a voice interactive real-time translation application
- 10. DJI Mavic 2 Pro を自作Androidアプリで自動操縦させる(2)~サンプルプログラムの実行(準備編)~
- 11. JetpackComposeで9patchイメージを描画する
- 12. 20230729_自主学習MVVM_データレイヤ勉強編_DI完敗
- 13. FlutterでGoogle Driveにファイルをアップロードして参照する
- 14. android:enableOnBackInvokedCallback=”true”にしたときのバックキーのKeyEventの変化
- 15. 20230728_自主学習MVVM_データレイヤを勉強せねば
- 16. JetpackComposeでFirebaseAuth(メールリンク認証)
- 17. ガチで本物のAviUtlをスマホで使う方法(当然重い)
- 18. AndroidのJUnitテストは超ムズい(4)
- 19. JetpackComposeでFirebaseAuth(Google認証)
- 20. Flutter?audioplayers を使ったのに ios, android 端末で音が鳴らない、小さい時の対処法
Android端末にHMS Coreをインストールする方法
# 手順
1. Android端末のブラウザを起動し、https://consumer.huawei.com/jp/mobileservices/appgallery/ を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/8f79db28-4816-f65f-73a7-1cfaef0ad2de.png)2. 「AppGalleryをインストール」をタップする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/ca88d35a-4906-ad45-1907-4ad5d39b3191.png)3. 画面に表示されているリンクを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/74ffcf25-663c-4ad9-a04c-7ff0ffe72
KMM(Kotlin Multiplatform Mobile)は廃止され KMP(Kotlin Multiplatform)に統一されたよ
長らくKotlin界隈でたびたび混乱していた **KMM(Kotlin Multiplatform Mobile)** と **KMP(Kotlin Multiplatform)** がついに終止符が打たれましたね
KMM(Kotlin Multiplatform Mobile)廃止です?
? Update on the name of Kotlin Multiplatform
From now on, “Kotlin Multiplatform” (KMP) is the preferred term when referring to the Kotlin technology for sharing code, regardless of the combination of platforms being discussed.
We are deprecating the “Kotli
KotlinCoroutineでFirestoreにアクセスする
# この記事の内容
kotlin coroutineを使用して、Firestoreのデータ追加とデータ読み取り、コールバックでのデータ読み取りをします。### 前提
FirebaseAuthでのログイン・ログアウトが実装されている前提です。### Firestoreの構成
Firestoreの構成は以下の階層構造になっています。
“`
users – collection
┣ {auth.user1.uid} – document
┃ ┗ spot_list – collection
┃ ┣ spotデータ1 – document
┃ ┗ spotデータ2 – document
┗ {auth.user2.uid} – document
┗ spot_list – collection
┗ spotデータ3 – document
“`
Firestoreは、先頭にCollectionというDocumentを複数格納するコンテナがあります。
Documentは、SubCollectionもしくは単純な文字列とか数値とかを格納でき
[Android]エラー: java.lang.SecurityException: No active admin
## 環境
– Andoroid 13(SDK 33)
– Google Play Console## 状況
Google Play Consoleのリリース前レポートで発生しました。
エラーメッセージ
> java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadmin.DeviceAdminReceiver}
スタックトレース
“`
Exception Process: com.google.android.apps.mtaas.deviceadmin, PID: 6046
java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadm
Android studio Export Project復元に注意
# Exportしたデータを復元しなければならない
– 何かやらかしてBuild不可になった
– やっぱりやらかして元に戻らなくなった。
– Exportはちゃんとできている:::note info
メニュー(Windows)
File > Export で任意のフォルダにzipデータが保存されます。
:::# 復元しないじゃないか!
**調べた情報**
> 復元
>> Zipファイルを任意のフォルダに解凍する。
>> File>New>Import Projectでインポートする。– 確かに環境は戻ったように見えます・・・
## Buildできない!!
– build.gradleもなんか前と違う。一つしかない!
– 一旦新しいジェクトを作ってみました。:::note warn
確認
何かおかしいところを確認します。
:::# (解決策)そのまま解凍してAndroid studio を開かない!
:::note info
– 新しいプロジェクト:プロジェクト名>app
– 保存したZip名>プロジェクト名>app
:::**ハマリポイントは以下の通り
Android の端末の言語設定をコマンドで変更したい
# 概要
端末の言語設定を毎回手動で変更するのが面倒だったので、楽にできる方法をまとめました。## adb コマンドで設定画面を開いてから言語を変える
“`shell
adb shell am start -a android.settings.LOCALE_SETTINGS
“`
言語設定画面はメーカーやAndroidのバージョンによって導線が微妙に違ったりするので、これを使うとちょっと楽になるかも。## ドキュメントに書いてある方法
こちらに記載されている方法です。
https://developer.android.com/guide/topics/resources/localization?hl=ja“`shell
adb shell
setprop persist.sys.locale fr-CA
“`のような感じで簡単に変更できそうな感じで書いてありますが、実際に試すと効果はありません。
## customlocal2 経由で変更する
“`shell
adb shell am broadcast -a com.android.intent.a
広告IDを特定の値に変更したい(rootが必要)
“`shell
adb root # root じゃないと編集できない# 広告IDが記載されているファイルをローカルにコピー
adb shell cat /data/data/com.google.android.gms/shared_prefs/adid_settings.xml > adid_settings.xml# ここでローカルにコピーした adid_settings.xml をエディタで開いて任意の値に変更する
# 反映する
adb push adid_settings.xml /data/data/com.google.android.gms/shared_prefs/adid_settings.xml# root を解除して作業終了
adb unroot
“`
DJI Mavic 2 Pro を自作Androidアプリで自動操縦させる(3)~サンプルプログラムの実行(実行編)~
今回はMobile SDK(Android版)のサンプルプログラムを動かすための準備をします。
[前回の記事](https://qiita.com/shiiiinnooooo/items/32f59f62fdc3ec3f98c0)では、サンプルプログラムを実行するための準備を行いました。# サンプルプログラムのダウンロード
[このサイト](https://github.com/DJI-Mobile-SDK-Tutorials/Android-ImportAndActivateSDKInAndroidStudio)からサンプルプログラムをダウンロードしましょう。
今回実行するサンプルプログラムは、DJI SDKが正常に実行されることを確認する、というだけのアプリです。早速ダウンロードしていきます。
下記画像の右上にある緑色の「Code」というボタンを押すと、zip形式でダウンロードできます。
![スクリーンショット 2023-07-31 11.57.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com
How to use YYSystem, a voice interactive real-time translation application
Let’s introduce the usage of YYSystem, which can assist in web meetings between English and Japanese speakers.
# Introduction
YYSystem is a cross-platform application (Windows, iPhone, Android) capable of transcribing multiple-person meetings and translating into multiple languages. It is well-balanced in terms of voice recognition accuracy, sentence boundary recognition, and translation precision, particularly made easy to handle in conversations using Japanese and English. Although the free v
DJI Mavic 2 Pro を自作Androidアプリで自動操縦させる(2)~サンプルプログラムの実行(準備編)~
今回はMobile SDK(Android版)のサンプルプログラムを動かすための準備をします。
[前回の記事](https://qiita.com/shiiiinnooooo/items/21689dff1ffcf1b91104)では、AndroidStudioでDJI Mobile SDKを使用できるようにしました。
# 手順
1. DJI Developerの登録
1. App Keyの取得# DJI Developerの登録
まずはじめに、DJI製品を使用する際に必要となるDJIアカウントを作成する必要があります。
[DJIの公式サイト](https://www.dji.com/jp)からアカウントを作成します。登録の際には[このサイト](https://sekido-rc.com/blog/technical/210329_002/)を参考にさせていただきました。
[DJIの公式サイト](https://developer.dji.com/)から、登録を行います。
まずはじめに、サイトの右上から「Register」を押してください。
![スクリーンショット 202
JetpackComposeで9patchイメージを描画する
# 概要
![スクリーンショット 2023-07-31 10.34.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491965/004acf7e-eee5-bdaa-bc28-0347156c1df8.png)
「Sign in with Google」ボタンを作りたかったんです。このボタンにはガイドライン([ガイドライン](https://developers.google.com/identity/branding-guidelines?hl=ja))がありまして、このサイトから画像をダウンロードすると、android用は9patchイメージなんです。
さて、これをJetpackComposeでどうやるか?という考察です。
## ファイルをプロジェクトにインポートする
上記のガイドラインページから画像をダウンロードすると、サイズごとに8個のファイルが入っています。
4つのボタン状態(disable, focus, pressed, normal)x(light or dark)で8個
20230729_自主学習MVVM_データレイヤ勉強編_DI完敗
## やったこと
* 公式のデータレイヤの研修
https://developer.android.com/courses/pathways/android-basics-compose-unit-5-pathway-2?hl=ja## わかったこと
* データリソースの勉強も必要
* DIの箇所の理解不足
丁寧に勉強せねば。## わからないこと
* サンプルアプリの画面レイアウトとしての、xmlファイルで存在しない。(別のやり方があるんだろう・・・)
=> いろいろ調べているとこれであると推測。ChatGPTにも聞いてみました。ChatGPT君が言うには・・・
>Jetpack Composeファイル:もしリポジトリがJetpack Composeを使用している場合、Jetpack Composeファイルが含まれている可能性があります。Jetpack Composeでは、UIコンポーネントがKotlinコードで直接記述されるため、XMLレイアウトファイルを使用しないことがあります。## これからやること
完了まで行えていないので、続きやってみよう~。## 偉大
FlutterでGoogle Driveにファイルをアップロードして参照する
# はじめに
ちょっとGoogleドライブにファイルをアップロードして参照したくなりました。
昔、Javaでやったときに面倒だった記憶がありますが、Flutterでも面倒そうなので、ちゃんとやったことを残しておきたいので記事にします。バージョン関係は以下の通り
“`console
> Flutter –version
Flutter 3.10.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 796c8ef792 (6 weeks ago) • 2023-06-13 15:51:02 -0700
Engine • revision 45f6e00911
Tools • Dart 3.0.5 • DevTools 2.23.1
“`現時点ではAndroidのみの話になります。
また、お試し実装なのでエラーチェック等かなり甘いのでご注意を。# ゴール
ログインして、Google Driveにファイルをアップロードしてそのあとダウンロードする。
# 準備
android:enableOnBackInvokedCallback=”true”にしたときのバックキーのKeyEventの変化
予測型「戻る」ジェスチャーをオプトインしていますか?
オプトインした場合のDialogでのバックキー検出の問題に遭遇しました。
https://developer.android.com/guide/navigation/predictive-back-gesture?hl=ja
予測型「戻る」ジェスチャーをオプトインするには、 `AndroidManifest.xml` の `
` タグ内で、 `android:enableOnBackInvokedCallback` フラグを `true` に設定します。 “`AndroidManifest.xml
…
“`# AppCompatActivityでの変化
このとき、
> 注: OnBackPressedCallback は、android:enableOnBackInvokedCallback の値に関
20230728_自主学習MVVM_データレイヤを勉強せねば
## やったこと
* 情報収集(ネットサーフィン)## わかったこと
* 自分が終了した研修は、UIレイヤだけだったこと
* まだデータレイヤにおいては、ノータッチであること
* データレイヤは、MVVMのModelのことであり、RepositoryとDataSourceで成り立っていること
* Android開発で推奨されるアーキテクチャは、厳密にはMVVMではないという意見があること(公式は近いとしてる。)
* 変数の監視には、オブザーブとxmlからバインドする奴はどっちでもいいということ
(UIレイヤの話ですが)## わからないこと
* データレイヤの世界## これからやること
公式のデータレイヤの研修をやろうかな
https://developer.android.com/courses/pathways/android-basics-compose-unit-5-pathway-2?hl=ja## 偉大なる参考様
いつもありがとうございます。https://zenn.dev/nemototea/articles/d7fe9b095e3487
https:
JetpackComposeでFirebaseAuth(メールリンク認証)
# JetpackComposeでFirebaseAuth(メールリンク認証)
FirebaseAuthのメールリンク認証を実装していきます。メールリンク認証とは、以下のフローで認証を行うものです。
1. ユーザーが、アプリでメールアドレスを入力する(パスワードはいらないです)
1. Firebaseが、認証情報をDeepLinkにしたDynamicLinksを載せたメールをそのメールアドレス宛に送信する
1. ユーザーが、DynamicLinksを開く(=タップする)
1. アプリが、メールアドレスとDynamic LinksのDeepLinkを使って、FirebaseAuthにSignInするメールアドレスの正当性だけでアカウントが作れる様なアプリの場合は使えそうですね。
(小ネタ)DynamicLinks
メールやSNS、Webサイトにあるリンクを押すと、連動するアプリが起動するよ。という機能です。
(小ネタ)DynamicLink
ガチで本物のAviUtlをスマホで使う方法(当然重い)
# 大 前 提
これはAndroid専用です。
iPhoneの方は諦めるか自力で頑張りましょう。俺は絶対やんない
# なんでそんなことしようと思ったのか
スマホ用の動画編集アプリって…なんかこう……使いにくくないですか?
数値を直接指定できなかったりするし、当然ウィンドウもない。それと、どうしてもマウスが欲しくなる。え?俺だけ??
# 注意事項
こまめにキャッシュを削除しても最終的に**マジで4GB消費します**。
ストレージと時間とネットに余裕がある時にやりましょう。# やり方
### Step 0
まずはTermuxをインストールしましょう。
GooglePlayでもリリースされていますが、GooglePlayの仕様変更のせいで更新停止しています。
なにか特殊な事情がない限りF-Droidからインストールしましょう。https://f-droid.org/ja/packages/com.termux/
それとお好きなVNCクライアントもインストールしておいてください。
個人的にはRealVNC Viewerが使いやすいです。https://play.go
AndroidのJUnitテストは超ムズい(4)
# AndroidでAlertDialogを使っている場合のテスト
AndroidでEditTextの入力値チェックで不正だった場合、AlertDialogを使う場合があります。他、何かとユーザに注意喚起させたい場合に使うことがあると思います。Fragment方式(Activity1個に対してFragment複数で画面遷移する方式)でFragmentをinstrumentテストすると、AlertDialogを使っているとうまく動きません。何もせずに実行するとAlertDialogが出たところで・・・
“`
androidx.test.espresso.PerformException: Error performing ‘single click – At Coordinates: 600, 1319 and precision: 16, 16’ on view ‘view.getId() is <2131296376/jp.co.suzuken.ocrexpirchk:id/clearBtn>‘.
at androidx.test.espresso.PerformExcepti
JetpackComposeでFirebaseAuth(Google認証)
# Googleアカウント認証+FirebaseAuth with JetpackCompose
OneTapAuthじゃない方(今までのやり方)のGoogle認証+FirebaseAuth認証を実装していきます。
[OneTap認証](https://qiita.com/jozuko_dev/items/706fc6c89e6982bfd7e2)で実装したクラスを拡張していきます。## 関連記事
– [JetpackComposeでFirebaseAuth(パスワード認証)](https://qiita.com/jozuko_dev/items/f8106009ad4571740d1f)
– [JetpackComposeでFirebaseAuth(GoogleOneTap認証)](https://qiita.com/jozuko_dev/items/706fc6c89e6982bfd7e2)
– [JetpackComposeでFirebaseAuth(メールリンク認証)](https://qiita.com/jozuko_dev/items/bf343ba3f2b37a018
Flutter?audioplayers を使ったのに ios, android 端末で音が鳴らない、小さい時の対処法
AudioPlayer の Global 設定を変更する必要があります。
下記のような関数を作成した場合、
初期化(initialization)時に
`initAudioPlayer()`
を実行してください。
下記のコードはゲームSE を鳴らす場合を想定した設定項目です。
“`
import ‘package:audioplayers/audioplayers.dart’;final AudioContext audioContext = AudioContext(
iOS: AudioContextIOS(
category: AVAudioSessionCategory.ambient,
options: [
AVAudioSessionOptions.defaultToSpeaker,
AVAudioSessionOptions.mixWithOthers,
AVAudioSessionOptions.allowAirPlay,
AVAudioSessionOptions.allowBlu