- 1. 【UnityRenderStreaming×ARFoundation】スマホ向けのビデオストリーミング & カメラ制御してみた
- 2. onClickListenerが連打されないようにする
- 3. Flutter(MethodChannel/Android)
- 4. APKファイルの作成方法
- 5. ONLYOFFICE Documents 5.5 for Android、パスワードや塗りつぶし図形、UIを改善
- 6. Android TV用のJetpack Composeがリリースされました
- 7. a-2-1(2).通常の画面遷移(Intent)とデータ受け渡し
- 8. DroidKaigi2022 セッション資料&関連情報まとめ
- 9. モバイルアプリの自動テストツールShiratesを使ってみよう
- 10. Cordovaアプリ開発の備忘録(プラグイン編)
- 11. DroidKaigi 2022のセッションで驚いたところ
- 12. Android12 ビルドエラー
- 13. Cordovaアプリ開発の備忘録
- 14. 【Android】個人的新たに見つけたアノテーションのメモ
- 15. 【Android&Espresso】Navigationで引数付きの画面遷移をした時のUIテストについて
- 16. Kotlin 1.7.20の変更点
- 17. ReadyMedia (MiniDLNA) 構築・Android 連携メモ
- 18. 【Android】ローカルDBに日時を保存する方法と注意点
- 19. 【Android】PopupMenuの表示方法
- 20. 【Android】斜めの線をCanvasで引く方法
【UnityRenderStreaming×ARFoundation】スマホ向けのビデオストリーミング & カメラ制御してみた
# はじめに
こちらはIwaken Lab. 主催のXR好き開発合宿ブログリレーの14日目の記事になります。この記事では、開発合宿中に触っていた技術について書かせてもらいます。https://iwakenlab.jp/
また、XR好き開発合宿では、たくさんの方々から温かいお言葉や支援をしていただきました。この場をお借りして感謝申し上げます。本当にありがとうございました。
# この記事の概要
UnityRenderStreamingの機能を使って、処理の重たい描写をグラボがついてるPCに任せて、その映像をスマホで見れるようにし、ARFoundationを利用することで、PC上で動作するカメラの位置情報と回転情報をスマホで制御できるようにしました。![システム図 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2700137/fbc46cd6-aac2-a3d9-7b0d-45e16d7c220e.jpeg)
スマホの傾きや位置がUnityのシーン内のカメラに連動しているため、動画のよ
onClickListenerが連打されないようにする
#初めに
今回は、`Android`において最も使われているであろう`onClickListener`に対する連打対策の実装方法です。
ユーザーが急いでる時やせっかちな人が連打をするのは良くあることです。
自分が仕事から離れている時も意外と無意識にやってたりします。
しかし、連打がされてしまうと大抵の場合クラッシュしたり、意図せず同じ処理が走ってしまうことで変な挙動になったりしてしまいます。
その対策を紹介していきます
### 本文
`View.OnClickListener`をオーバーライドしたものを`Extension`を使って共通化するだけです。
`avoidDoubleClickMillis`には連打を許容する感覚を入れます。
今回の場合1度クリックされてから200ms以降にクリックされたものは連打とみなさず、同じ処理が走るようになります。
“`kotlin:Extensions
fun View.nonDuplicateClickListener(
clickListener: () -> Unit,
) {
setOnClickListener(
Flutter(MethodChannel/Android)
# MethodChannel
FlutterとAndroid or iOS間のやりとりを可能にするクラスです
Flutter側でメッセージを送信して、Android or iOS側でメッセージを受信して対応した処理の結果を返却する# Flutter側
Flutter側のメッセージ送信手順を記載します1. MethodChannelの実装(チャンネル名を指定します。プラットフォーム側で同じチャンネル名を指定する必要があります)
2. invokeMethodの実装
1. 第1引数:プラットフォーム側でメソッドを識別するための文字列を指定
1. 第2引数:プラットフォーム側に送りたいデータを指定。複数送る場合はMap型にすると良いらしいです# プラットフォーム(Android)側
プラットフォーム側のメッセージ受信手順を記載します。今回はAndroidのみの記載になります1. MethodChannel.setMethodCallHandlerでメッセージを受信
2. MethodCallのmethod(Flutter側で指定した文字列)で処理の切り分け
APKファイルの作成方法
#はじめに
androidアプリの開発でマストになるのがAPKファイルの作成です。・APKでなにができるのか
・具体的にどうすれば作成できるのかまとめました。
#APKファイルでなにができるのか?
Androidアプリケーションを格納することができる実行ファイルです。
AndroidOSでAPKファイルを実行すると、格納されたAndroidアプリケーションが実行されます。
現在開発中のアプリを端末で実際に動作確認する事ができます。#具体的にどうすれば作成できるのか
Androidアプリ開発の際にはAndroid studioという統合開発環境を利用するのが一般的ですが、
そちらにAPKを作成する機能があります。1.ヘッダーメニューから「Build」を選択し、「Generate Signed Bundle/APK…」を選択します。
Android
[スクリーンショット 2022-10-12 11.33.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915524/abc56
ONLYOFFICE Documents 5.5 for Android、パスワードや塗りつぶし図形、UIを改善
みなさん、こんにちは!ONLYOFFICE Documents for Androidをバージョン5.5にアップデートしました。今回のリリースでは、パスワード保護、塗りつぶし図形、より直感的なインターフェースなど、モバイルでの文書編集がパワーアップしています。
## モバイルビュー
モバイルビューで、テキスト文書内のコンテンツをより快適に閲覧できます。
どこにあるのか:ドキュメントを開く → 「設定」アイコンをタップ → 「モバイルビュー」スイッチャー
また、ドキュメントのデフォルトの表示モードとして設定することも可能です。
## パスワードによる保護
機密ファイルへの不正アクセスを禁止するためのパスワードを設定します。あらゆる種類の文書で利用可能です。
どこにあるのか:ドキュメントを開く → 「設定」アイコンをタップ → 「保護機能」
## 図形に対する塗りつぶしやカスタマイズ
新しいフィリングタイプ、グラデーション、テクスチャ、パターンを追加しました。
どこにあるのか:「シェイプ」設定 → 「シェイプ」タブ → 「スタイル」 → 「シェイプの塗りつぶし」 → 「
Android TV用のJetpack Composeがリリースされました
# はじめに
これまでJetpack Composeには、通常のComposeの他にもWear OS用のComposeが存在していて、Android TV用のComposeが存在していなかったのですが、2022/10/05にalpha版がリリースされていたので、そちらのAPIを抜粋します。
https://developer.android.com/jetpack/androidx/releases/tv
# フォーカスについて
その前に、Android TVはPhoneなどと違い、タッチパネルも持たず、トラックボールなどを用いてのポインタ操作でのコンポーネントクリックも不可能なデバイスです。
Android TVの主な操作は、リモコンを操作してUIコンポーネントを移動して、決定ボタンで現在指し示す場所をクリックする操作です。
そのため、現在指し示す場所(フォーカス)がどこにあるかをユーザーに教えてあげる必要があります。これを行うために、`FocusRequester`などでフォーカスを実装し、フォーカスされている箇所は色を変えるなど、周りより強調する対応が必要になります。
a-2-1(2).通常の画面遷移(Intent)とデータ受け渡し
### a-2-1(2).通常の画面遷移(Intent)とデータ受け渡し
#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)#### 課題
3. Intentを利用して画面遷移ができるか。
3. Intentを利用して画面遷移後に元の画面に戻ることができるか。
3. Intentを利用して画面遷移時にパラメーターを渡すことができるか。#### Github
https://github.com/rwakizaka7/AndroidTest
#### テスト実装
“`kotlin:IntentTestActivity.kt
class IntentTestActivity : AppCompatActivity(), View.OnClickListener {
companion object {
const val CHILDREN_STATES = “children_states”
}private lateinit var
DroidKaigi2022 セッション資料&関連情報まとめ
[DroidKaigi 2022](https://droidkaigi.jp/2022/) の各セッションの登壇資料と動画を随時まとめていきます。
Twitter や YouTube の情報をもとに更新していきますが、抜け漏れ誤りなどありましたらコメントなどでお伝えください。
# Day1
## 10:30~ Welcome Talk
動画(1:10:35~)
## 11:15~ Getting started with Dagger and Hilt
## 11:15~ Jetpack Compose で Material Design 3
登壇資料
https://speakerdeck.com/yanzm/material3-with-jetpack-compose
## 11:15~ Gradle Managed Virtual Devicesで変化するエミュレータ活用術
登壇資料
https://speakerdeck.com/sumio/droidkaigi-2022-gradle-mana
モバイルアプリの自動テストツールShiratesを使ってみよう
本記事は自動テストツールShirates(シラテス)の紹介記事です。※はてなブログからの転載です。
# モバイルアプリのテストの自動化
昨今、ソフトウェアテストの自動化がますます重要になっています。モバイルアプリも例外ではありません。自動化を実現するツールには有償・無償のものが多数存在します。無償のもので注目されている製品としてはAppiumがあります。筆者もAppiumを導入して使用しましたが、とてもハードルが高いという感想です。はっきり言って、茨の道です。ちゃんと使ってテストの実務で成果を出せるようになるにはある程度の期間修行が必要です。開発スキルを持ったエンジニアでも苦労するのですから、もっと導入や使用方法が簡単でないとテストエンジニアに広く普及させるのは難しいと考えています。
# Shiratesとは
Shiratesはそのような敷居の高さを少し下げてくれるOSSのツールです。GitHubから入手できます。
https://github.com/ldi-github/shirates-core/blob/main/doc/markdown/index.md
ざ
Cordovaアプリ開発の備忘録(プラグイン編)
前回の投稿では、Cordovaアプリの基本的な開発手順についてまとめました。
今回は、プラグインの開発手順についてまとめようと思います。Plugin Development Guide
https://cordova.apache.org/docs/en/11.x/guide/hybrid/plugins/index.html
# プラグイン名を決める
まずは、プラグイン名を決めましょう。
今回は適当に「sampleplugin」とでもしておきましょうか。フォルダ名は、慣例があり、「cordova-plugin-sampleplugin」となります。
“`
> mkdir cordova-plugin-sampleplugin
> cd cordova-plugin-sampleplugin
“`# plugin.xmlを作成
“`xml:cordova-plugin-sampleplugin/plugin.xml
DroidKaigi 2022のセッションで驚いたところ 基本的にはただのメモです。
特に驚いたところを太字にしておきます。
コードレビューしていたりなどで、あんまり聞けていない部分もあるのでお許しください :bow:## Jetpack Compose で Material Design 3
https://speakerdeck.com/yanzm/material3-with-jetpack-compose
Design Token = デザインの値に名前をつけたもの。
自分の頭の中のイメージをコードにするとこんな感じです。
“`kotlin
interface DesignTokenclass SystemToken(
// ここのContextはDarkThemeかどうかなどという意味のContext
val refs: Map
): DesignTokenclass ReferenceToken(val color: Int): DesignToken
“`**その文字列の例は`md.sys.color.on-secondary`。これを分解する
Android12 ビルドエラー
Android Studioでのビルドエラー:
android:exported needs to be explicitly specified for
. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. 原因
・Android12になった場合、AndroidManifest.xmlに追記しているAcitivityなどに、明確に「android:exported=”true|false”」を設定しないといけません。・利用中のライブラリにも、「android:exported=”true|fal
Cordovaアプリ開発の備忘録
スマホアプリのアプリ開発にCordovaを使っています。サーバサイドはNode.js、ブラウザアプリはJavascriptを使っているので、スマホのネイティブアプリの開発もJavascriptで開発できるのは新言語を覚える必要がなく、Javascriptに専念できるので魅力的です。
さらに、iOSやAndroidの両方のネイティブアプリを1つのコードで動作できるのはありがたいです。Cordova
https://cordova.apache.org/
今回は、Cordovaアプリを開発・デバッグするための方法や、OS独自の機能を実装できるプラグインの開発方法についてまとめておきます。いろんな開発をやっていると、Cordovaの開発方法を結構忘れがちになるので、備忘録として残しています。
# Cordovaのインストール
Node.jsがインストールされている前提です。
以下を実行すれば完了です。“`
> npm install cordova -g
“`また、開発する対象のスマホOSごとにコンパイル環境のインストールが必要です。
[Androidの場合]
An
【Android】個人的新たに見つけたアノテーションのメモ
# はじめに
これまでに
[【Android】個人的によく使うアノテーションについてのメモ](https://qiita.com/Tsubasa12/items/e02458af070748d20cb4)
[【Android】個人的によく使うアノテーションについてのメモ part2](https://qiita.com/Tsubasa12/items/46ef6c82b6fab28b9035)
という記事を書いてきましたが、今回は新たに見つけたアノテーション達の意味を調べたので後に見返せるように記事に残します# アノテーション表
※”@”をつけるとアドレス認識になってしまうので省略
|アノテーション|意味|
|:—|:—|
|ContributesAndroidInjector|ActivityでInjectができるようにする|
|DrawableRes|受け取る値をdrawableのIDとして定義したものに限定する|
|NeedsPermission|パーミッションが必要な処理を実行する関数に付ける|
|RuntimePermissions|パーミッションを処理するA
【Android&Espresso】Navigationで引数付きの画面遷移をした時のUIテストについて
# はじめに
皆さん、ごきげんよう!れぶです!
今回の記事では`Navigation`で引数付きの画面遷移を行った場合、遷移先であるフラグメントのViewをテストする方法について整理しました。
**遷移元から送られた値を遷移先で表示する処理について、UIテスト(`Espresso`)を行いたい**方に特に参考になればと思います。それでは、参りましょう!!
# 開発環境
* MacBook Air
* Android Studio Chipmunk | 2021.2.1
* Kotlin 1.6.10
* compileSdkVersion 33
* targetSdkVersion 33
* minSdkVersion 21
* Espresso 3.4.0# 前提
## 処理内容
⑴ FirstFragmentのボタン(button1)をタップ
⑵ SecondFragmentに遷移
⑶ 数字の10を送る
⑷ SecondFragmentのテキストビュー(textview1)に⑶を表示※ 今回はあくまで内容を簡単にするために、複雑な処理なしでデータを受け渡します。
Kotlin 1.7.20の変更点
※ソース記事は[こちら](https://kotlinlang.org/docs/whatsnew1720.html)
※Kotlin/JS、Kotlin/Nativeについては割愛します。
“`
Kotlin 1.7.20用のIDEサポートがIntelliJ IDEA 2021.3,2022.1,2022.2で利用可能
“`
[リリース日:2022/9/29](https://kotlinlang.org/docs/eap.html#build-details)
Kotlin 1.7.20がリリースされている。こちらに、このリリースからいくつかのハイライトがある。
– 新しいKotlin K2 コンパイラが`all-open`、SAM with receiver、Lombok等のコンパイラプラグインをサポート
– 上限を含まない範囲をつくるための`..<`演算子のプレビューの導入 - 新しいKotlin/Nativeのメモリマネージャーが現在デフォルトで有効 - JVM用の新しい実験的機能の導入:ジェネリックの基底型を持つインラインクラス このビデオで、変更の短い概要を見つけるこ
ReadyMedia (MiniDLNA) 構築・Android 連携メモ
# これは作業録です
– TrueNAS の Plex 使おうかと思ったけど Playlist (.m3u) の扱いが微妙そうだったので見送り# ReadyMedia (MiniDLNA)
– HW
– NUC7CJYH
– その内 OrangePi とかに移すかもしれない
– SW
“`zsh
% uname -a
Linux ubuntu 5.4.0-126-generic #142-Ubuntu SMP Fri Aug 26 12:12:57 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux% cat /etc/os-release
NAME=”Ubuntu”
VERSION=”20.04.4 LTS (Focal Fossa)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=”Ubuntu 20.04.4 LTS”
VERSION_ID=”20.04″
HOME_URL=”https://www.ubuntu.com/”
SUPPORT_URL=”https://help.ubuntu.com/
【Android】ローカルDBに日時を保存する方法と注意点
## SQLite と日時型
Android 標準のローカルデータベースは SQLite です。
[Room ライブラリ](https://developer.android.com/training/data-storage/room?hl=ja)を使った場合も内部では SQLite が使用されます。SQLite には日時型がありません。
→[Datatypes In SQLite](https://www.sqlite.org/datatype3.html)
日時を保存するには、SQLite で使えるいずれかの型に変換してやる必要があります。SQLite の `datetime` 関数は `YYYY-MM-DD HH:MM:SS` 形式の TEXT 型の値を返します。
→[Date And Time Functions](https://www.sqlite.org/lang_datefunc.html)
SQL で `datetime` 関数との比較などを行えるようにするため、
ローカル DB に保存するのはこれと同じ形式にするのがよいでしょう。### Roo
【Android】PopupMenuの表示方法
# はじめに
最近シンプルなPopupMenuを実装したのですが、ドキュメントが少ないように感じましたので簡単にまとめておこうと思います。# 表示方法
まず、以下のようなmenu.xmlを作成します。“`test.xml
【Android】斜めの線をCanvasで引く方法
今回は斜めの線をCanvasで引く方法を記載しようと思います。
このやり方は簡単で、縦横の比率が変わっても角から角へ線を引くことができます。
“`LineView.kt
class LineView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : View(context, attrs, defStyleAttr) {
var paint: Paint = Paint()
override fun onDraw(canvas: Canvas) {
// 線の太さ
paint.strokeWidth = 4f
// 線の色
paint.color = ContextCompat.getColor(context, R.color.black)
// 線を表示する位置
canvas.drawLin