- 1. UE5 ちょっとまって?!そのcreate widget危険じゃない??
- 2. jetpack composeで折り返しのViewを作る
- 3. Android端末からのリモート開発環境構築(Remote.it&Termus)
- 4. JetpackComposeのscrollについて
- 5. Jetpack Composeでコンテンツのサイズに柔軟に対応しつつ正方形を維持するレイアウト
- 6. Android Bluetooth接続 PINコード setpinで入力(Java)
- 7. Android端末にHMS Coreをインストールする方法
- 8. KMM(Kotlin Multiplatform Mobile)は廃止され KMP(Kotlin Multiplatform)に統一されたよ
- 9. KotlinCoroutineでFirestoreにアクセスする
- 10. [Android]エラー: java.lang.SecurityException: No active admin
- 11. Android studio Export Project復元に注意
- 12. Android の端末の言語設定をコマンドで変更したい
- 13. 広告IDを特定の値に変更したい(rootが必要)
- 14. DJI Mavic 2 Pro を自作Androidアプリで自動操縦させる(3)~サンプルプログラムの実行(実行編)~
- 15. How to use YYSystem, a voice interactive real-time translation application
- 16. DJI Mavic 2 Pro を自作Androidアプリで自動操縦させる(2)~サンプルプログラムの実行(準備編)~
- 17. JetpackComposeで9patchイメージを描画する
- 18. 20230729_自主学習MVVM_データレイヤ勉強編_DI完敗
- 19. FlutterでGoogle Driveにファイルをアップロードして参照する
- 20. android:enableOnBackInvokedCallback=”true”にしたときのバックキーのKeyEventの変化
UE5 ちょっとまって?!そのcreate widget危険じゃない??
# 端的に言えばGCの話です
現在android向けのアプリをUE5で作っているのですが、デバッグ中にUIを付けたり消したりを繰り返すとどんどんfpsが低下する現象を発見しました。
デバッグコマンドで見てみるとメモリーがかつかつになっていたため調査をした話です。
主にこの問題が起きるのはメモリの少ないモバイルです。## remove系の処理は内部的には破棄されてないぞ!!!
まんまです。remove from parent関数やremove all widgets関数で非表示にすると思いますがこれ、nullptrを代入をしないと永遠にメモリ空間陣取ります!!!
destroy actorとかと同じ感じだと思っていたのがすべての間違いでした。## 実際にやってみよう!
![Desktop Screenshot 2023.08.04 – 23.09.46.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953041/10a68ebb-7a16-18d7-0e90-cf1036325e69
jetpack composeで折り返しのViewを作る
# はじめに
今回はJetpackComposeを用いて画面いっぱいになったら自動的に折り返してくれるViewを紹介していきます
### 本文
`com.google.accompanist`にある`flowlayout`をプロジェクトに`implemention`することで使えるようになります
“`kotlin
//横
FlowRow(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.Start,
maxItemsInEachRow = 4
)
“`
`maxItemsInEachRow`は名前の通り何個までを許容するかです
`horizontalArrangement`は通常の`Arrangement`と同じで間隔や幅寄せを指定することができます。
ただし、注意が必要なのがまだBetaなのもあって`FlowRow`を使う場合該当の`Composable`関数に下記のアノテーションをつけなければいけません。
“`kotlin
@OptIn(
Android端末からのリモート開発環境構築(Remote.it&Termus)
# Android端末からのリモート開発環境構築(Remote.it&Termus)
# 目次
– [はじめに](#はじめに)
– [環境](#環境)
– [構築手順](#構築手順)
– [利用手順](#利用手順)
– [まとめ](#まとめ)# はじめに
この記事では、Android端末からリモート開発環境を構築する方法について紹介します。リモート開発環境の構築には、Remote.itとTermux、Termiusを使用します。Remote.itは、インターネット経由でデバイスにリモートアクセスするためのサービスであり、TermuxはAndroid端末上で動作するターミナルエミュレータです。TermuxによってAndroid端末にSSHサーバ機能とWake on lan機能を導入し、自宅のUbuntuサーバの起動スイッチとして利用します。
UbuntuサーバにもRemote.itとopensshを導入しておき、起動したらこちらもRemote.itでSSH接続するだけ!# 環境
– Android端末1(手持ち)
・Remote.it(Proxyサービス経由でSSHサー
JetpackComposeのscrollについて
# はじめに
Jetpack Composeのscrollについて調べた。
Jetpackでスクロールする場合、2種類の修飾子が利用できる
# scroll 修飾子
https://developer.android.com/jetpack/compose/gestures?hl=ja#scroll-modifiersverticalScroll 修飾子と horizontalScroll 修飾子の2種類があり、要素の中身が最大サイズを超えた場合にスクロールする。
実装は簡単だが、拡張性はあまりない。
内部でScrollable修飾子が使われている。
“`kotlin
Modifier.verticalScroll(rememberScrollState())
“`# scrollable 修飾子
https://developer.android.com/jetpack/compose/gestures?hl=ja#scrollable-modifierscrollableはscroll修飾子と違い、スクロールしても自動で要素のオフセットを動かしてくれない
Jetpack Composeでコンテンツのサイズに柔軟に対応しつつ正方形を維持するレイアウト
ここでは正方形を維持しつつコンテンツサイズに対して柔軟にレイアウトしたい時の実装の紹介です。
## 実装
以下のような `Modifier#layout` で縦横どちらか大きい方をサイズにするといったカスタムレイアウトで実現します。
“`kotlin
Modifier.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
val width = placeable.width
val height = placeable.height
val size = maxOf(width, height)
layout(size, size) {
val x = (size – placeable.width) / 2
val y = (size – placeable.height) / 2
placeable.placeRelative(x, y)
}
}
“`
Android Bluetooth接続 PINコード setpinで入力(Java)
### ■概要
##### 1:Bluetooth接続テスト
##### 2:PinCodeを手動ではなく、プログラムで挿入し、その後SPP通信でsocketをconnectして、接続状態 & デバイス登録状態をつくる。
##### 3:2の状態を作ることによって、connectがほぼ100%繋がる状態を作る。### ■UI
![Screenshot_2023-08-01-17-06-50-514.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/bd7fd071-f972-39f8-79e3-374a14447e62.jpeg)### ■ソースコード
“`java MainActivity.javapackage com.example.bluetooth_con_test_01;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
impor
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 の値に関