- 1. Freezedの使い方
- 2. BottomNavigationでアイコンを再タップして子画面から親画面に戻すテクニック
- 3. Agoraを使った音声ライブ配信アプリの作り方
- 4. Firebase Cloud Messaging(FCM)は中国では使えない
- 5. Android ダークモード コードで判定
- 6. ReactエンジニアがReact Nativeを使ってみた
- 7. 【Kotlin】TextView・AlertDialogにHTMLのタグを適用する
- 8. Ubuntu20.04LTSでReact NativeとExpoを試す
- 9. MPAndroidChart導入時にエラーが出た.
- 10. アプリのアップデートメッセージを眺めてみた
- 11. [Unity] AndroidのSpeechRecognizer APIレベル30以上で実装する
- 12. 【Android】ViewPager2の削除がずれる
- 13. adb コマンド
- 14. 【Android】Y乗換アプリをURLスキームから起動する
- 15. WifiP2pManagerで他端末を検出する手順
- 16. 【Android】フレームアニメーションを使ってパラパラマンガ風なアニメーションを実装する
- 17. coroutine 簡単なまとめと参考ページ
- 18. Androidのレイアウト概要
- 19. Android TextViewリンク多言語対応するときの色々
- 20. LazyColumn/RowでLazyListStateにアクセスするタイミングを間違えるとパフォーマンスが悪くなる
Freezedの使い方
#はじめにFreezedとは
簡単に言えばコピーメソッド等を含む**Immutable(不変)**なクラスを生成することができるパッケージのこと
Freezedでコードを生成することで便利なメソッドがいくつか使用できるようになる。:::note info
・copyWith
nullを割り当てることが可能な複製メソッド・==
同値であることの確認・toString
文字列化した時の結果・fromJson
Mapからの変換 ・toJson
Mapへの変換 :::
上記のメソッドを使用して開発を楽にしましょう!#Freezedの使用方法
## インストール“`pubspec.yaml
dependencies:
// @freezed などを使うために必須
freezed_annotation:dev_dependencies:
//コード生成するために必要
build_runner:
freezed:
// fromJson/toJson
BottomNavigationでアイコンを再タップして子画面から親画面に戻すテクニック
# 概要
この記事では、Bottom navigationで現在選択されている行先のアイコンを再度タップすることにより、その行先のトップの画面(ここでは親画面と呼びます)へと戻る処理を実装します。
これにより、ユーザーは複数の階層を下った画面からでも1タップで親画面へ戻ることができるようになります。
また、親画面で再タップした時に(親画面にあるRecyclerViewをトップまでスクロールするなどの)特定のアクションを起こせるような実装も同時に行います。![a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557192/beedefa2-c8e3-a264-7c61-194187886097.gif)
# 環境
– Kotlin 1.5.31
– Androidx.Navigation 2.3.5# テクニック
## アイテムを再選択したことの検知
[`BottomNavigationView#setOnNavigationItemReselectedListener(listener)`
Agoraを使った音声ライブ配信アプリの作り方
## はじめに
プレミアム音声サービスNowVoiceのAndroidアプリ開発を担当しているkiyoです。
NowVoiceアプリでは、音声ライブ配信機能を提供しています。
この記事では、ライブ機能を実装するまでの導入手順や実装ポイントについてまとめました。## NowVoiceライブ配信機能
NowVoiceアプリのライブ配信機能では、単純なライブ配信機能の他にも以下のような機能を備えています。
そしてその機能のほとんどがAgoraSDKを介して実装されています。“`
## ライブ配信機能
– MAX4人の対談機能
– ホストがユーザを対談に招待する機能(招待機能)
– リスナー側がホストに対談をリクエストする機能(挙手機能)
– コメント投稿機能
– 課金型コメント投稿機能(スーパーチャット)
“`この記事では、AgoraSDKを用いた音声ライブ配信機能を実現するためのポイントについてご説明します。
## 目次
1. Agoraとは
2.
Firebase Cloud Messaging(FCM)は中国では使えない
iOS/Androidアプリの開発を協業している他社担当者から、システムテストにおいて、
「プッシュ通知が届かない」
「iOS/Androidとも同じく」という報告があり、再現性を確認したのですが弊社側では再現せず…
同アプリはプッシュ通知にFirebase Cloud Messaging(FCM)を利用しています。
バックエンド側のログなどを追うと、どうやら、SDK経由で取得できるはずのプッシュトークンが取得できていない模様。で、協業他社によくよく聞いてみると、中国でテストをしている、とのことで、
調べたところ、FCMって中国(本土)では使えないんですね…(→参考リンク)同アプリは日本国内での利用が前提なので、協業他社に「プッシュ通知のテストだけは国内でお願いします」と依頼するだけで済んだのですが。
もしグローバルなサービスだったら、中国本土で使えるプッシュ通知mBaaSに乗り換えるなど、大幅なアーキテクチャ変更になるところでした。:cold_sweat:なお、FCMの公式ドキュメントではその辺りの制限事項に関する記述は見つけられませんでした。
参考リンク:
Android ダークモード コードで判定
### 内容
– コード上で、ダークモードを判定する### 環境
今回の内容を実践した私の環境です。
– macOS Monterey Version 12.0.1
– Android Studio Chipmunk 2021.2.1 Canary 4### 結論
下記のコードにより、ダークモード・ライトモード判定ができます。“`kotlin:judgeMode.kt
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// SDKのバージョンがR以降である場合にダークモード設定が導入されたため、それを判定する
if (context.theme.resources.configuration.isNightModeActive) {
// ダークモードの場合にこのスコープに入る
}
}
“`
ReactエンジニアがReact Nativeを使ってみた
#はじめに
もともとReactを使用してweb開発をしていましたが、React Nativeを使用したモバイル開発に関わることになりました。Reactを使っていた人間がReact Nativeを勉強してみた所感を書きたいと思います。本記事はReact Native公式ドキュメント[[1]]を参考に書いていきます。#前提
Reactが使える
TypeScriptが使える
モバイルは初めて環境構築と簡単な動作確認が知りたい人は前回の記事[[1]]で行っているのでそちらを参照してください。
#React Nativeの必要性
現在モバイル端末での使用OSはAndroidOSとiOSで二極化しており、なおかつそれぞれでの使用プログラミング言語も異なります。昔はiOSではObjective-C、AndroidではJavaが使用されていました。しかし、最近ではiOSではSwift、AndroidではKotlinという言語が使われており、2つのOS合わせると最大4つのコードが存在する可能性があるわけです。もちろんこれは開発効率の観点から見て良くなく、これを解決するためにReact Nati
【Kotlin】TextView・AlertDialogにHTMLのタグを適用する
この記事では、以下のような`String`をTextViewにバインドし、TextViewにHTMLタグを適用させていきます。
“`kotlin
val link = “””
Qiitaを開く
“””.trimIndent()
“`![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484337/d9c01e62-a66c-c3b2-b7e0-e1e211174381.gif)
### HtmlCompactの利用
[HtmlCompact](https://developer.android.com/reference/androidx/core/text/HtmlCompat)を利用することでHTMLのタグをAndroidにも適用することができます。“`kotlin
private fun transformHtml(text: String): Spanned {
Ubuntu20.04LTSでReact NativeとExpoを試す
#はじめに
React Nativeを業務で使うことになったのですが、Macが届くまでUbuntuでReact Nativeの勉強をする必要が出てきたました。そのためwebやモバイル上での勉強環境構築と動作確認を行っていきたいと思います。#前提
nodejsをインストール済み
unixコマンドを扱える
Reactが一通り扱える#環境
nodejs v16.13.0
npm 8.1.0#React Nativeとは
Facebookが開発したクロスプラットフォームのアプリ開発用フレームワーク。Reactでios、android両方書けて嬉しいよねってやつです。Flutterなども人気が出てきていますが、React NativeはReactの知識をベースにして書けるので、webのノウハウをある程度流用できて開発効率が良いのかなと思います。#Expoとは
ReactNativeを使ったアプリケーション開発をサポートしているフレームワークです。windows,macOS,Linux関係なくiOS,AndroidどちらもQRコードを介して実機での動作確認が可能です。またwebでの
MPAndroidChart導入時にエラーが出た.
MPAndroidChartを導入時にエラーが出ました.その解決方法および試したがダメだったものなどを紹介します.(初めてQiitaのページを執筆しました.至らない点がありましたらご指導をいただけますと幸いです.)
#1.生じた問題
MPAndroidChartを導入しようとしたところ,run appのビルド時にエラーが発生しました.
gradle変更後のsyncは通っていました.まず,環境と導入にあたっての記述を簡潔に記します.
・Windows 10
・Android Studio 2020.3.1
・Gradle 7.0.3“`build.gradle(project)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
maven { url ‘https://j
アプリのアップデートメッセージを眺めてみた
# はじめに
iPhoneでしばらくアプリのアップデートをしていなかったら、33アプリのアップデートがありました。
アップデートのメッセージを眺めていると、今後の参考になりそうだったので一覧にしてみました。# アップデートメッセージ
* 細かい調整をしました。
* 機能を改修しました。
* 軽微な修正を行いました。
* 軽微な改修を行いました。
* 軽微な不具合を行いました。
* 軽微な不具合を修正しました。
* 軽微な不具合に対応いたしました。
* 不具合を修正しました。
* 不具合な修正を行いました。
* いくつかの改良や修正をしました。
* 操作性の向上とバグの修正
* UI改善、軽微なバグの改修を行いました。
* バグの修正や安定性の向上などさまざまな改善を行いました。
* 一部不具合の修正とパフォーマンスの改善を行いました。
* 最新バージョンでは各種不具合が修正され、パフォーマンスも向上しています。
* アプリがクラッシュする問題が修正され、機能の読み込み速度が改善されました。
* このアップデートには、操作性および安定性の改善が含まれます。「軽微な」って結構いいか
[Unity] AndroidのSpeechRecognizer APIレベル30以上で実装する
# はじめに
音声テキスト認識を実装するにあたり、2021年11月からGoogleの規約の方で新規・既存とターゲット API レベル 30(Android 11)以上が必須となってますので、API30での実装のテストをしました。
https://android-developers-jp.googleblog.com/2020/12/new-android-app-bundle-and-target-api.html
過去の実装記事は下記
[[Unity] AndroidのSpeechRecognizer(音声テキスト認識)を実装する](https://qiita.com/atsutama/items/fd8dca4a1e621f4c855b)## 環境
macOS Catalina: 10.15.7
Unity 2018.4.19f
Android Studio 4.0.1## APIレベルの引き上げ時にやること
– aarの`targetSdkVersion`を30に変更
– Unityプロジェクトの`AndroidManifest.xml`に`queries`の設定
【Android】ViewPager2の削除がずれる
# この記事に登場するもの
* ViewPager2
* FragmentStateAdapter
* DiffUtil
* 削除がなんかズレる# AndroidDeveloper
https://developer.android.com/training/animation/vp2-migration?hl=ja# ViewPager2ざっくり実装部分
MyFragmentがViewPagerを保持し、1つ1つのPageFragmentが削除ボタンでadapterに削除をかける想定。
PagerAdapterはDiffUtilを使って画面を更新する。
※この実装だと、削除すると1つずれたページが何故か削除される。“`MyFragment.kt
lateinit var pagerAdapter: PagerAdapteroverride fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanc
adb コマンド
この記事では、よく使う adb コマンドをまとめます。
Android Debug Bridge version 1.0.41
Version 31.0.3-7562133######adb が使用可能な(adb サーバーに接続している)デバイス(シリアル番号)の確認
adb devices“`
$ adb devices
List of devices attached
emulator-5556 device
“`adb を使用する際に、デバイスが複数接続されている場合は、コマンドを送るデバイスのシリアル番号を “`-s“` (use device with given serial) で指定します。
“`
adb -s emulator-5554 …
“`######アプリのインストール
adb install [apkのパス]“`
$ adb install app-debug.apk
adb: failed to install app-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: in
【Android】Y乗換アプリをURLスキームから起動する
ショートカット作成アプリで遊んでいたときに困ったので備忘録です。
apk内のAndroidManifest.xmlを解析しました。以下のURLを開くことでYahoo乗換アプリを起動することができます。
` https://transit.yahoo.co.jp/transit_app/androidToBrowser.php `また、パラメータとして from , to を用いることで既存のショートカットと同様に、よく使う駅の情報を一発で開けます。
` https://transit.yahoo.co.jp/transit_app/androidToBrowser.php?from=東京&to=仙台`
WifiP2pManagerで他端末を検出する手順
WifiP2pManagerで他端末を検出するためには、多くの関数を呼び出す必要があります。(下図)
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340482/966ce865-274f-7aa1-0c75-fe1e63b72fe9.png)関数だけ抽出すると下表のようになります。
| 番号 | 関数 | 処理内容 |
| —-: | :—- | :—- |
| 1 | clearLocalServices | 自デバイスのBonjourサービス終了 |
| 2 | addLocalService | 自デバイスのBonjourサービス開始 |
| 3 | setDnsSdResponseListeners | 他デバイスのBonjoourサービス検出時処理、TXTレコード受信時 処理を登録 |
| 4 | clearServiceRequests | 他デバイスのBonjoourサービス検出終了 |
| 5 | addServiceRe
【Android】フレームアニメーションを使ってパラパラマンガ風なアニメーションを実装する
# はじめに
工事中# 実際に使ってみる
ソースコードは[こちら](https://github.com/Kaito-Dogi/android-sample-animation-resources).
![frame_animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933349/dbe49ee6-6ccd-bbd9-f45e-f3e6f5698f40.gif)## animation-listの作成
`res/drawble`に,以下のようなanimation-listファイルを作成する.
“`dice_animation.xml
- coroutine 簡単なまとめと参考ページ
いいリソースがたくさんあります。
リソースを読むための簡単なまとめと、参考になったリソースをメモしておきます。## 概要
コルーチンは軽量なスレッドのようなもの、とよく説明されていますが、個人的には、スレッドのラッパーというのがしっくりきます。
コルーチンを通してスレッドを操作することで、タスク管理を効率化できます。kotlinコルーチンなどというように、コルーチンはkotlinの言語自体の機能です。
今までJavaを使ってきた我々からすると、時間がかかる処理をする時に、別スレッドに切り出すことはポピュラーな手法かと思います。
なぜなら、そうしないと、時間がかかるタスクがスレッドをブロッキングして、その後ろのタスクが長い間実行されないからです。
またこのスレッド切り出しの結果、コードが各スレッドに散在し、また処理自体も非同期的になるため、処理が追いにくくなる問題がありました。kotlinのコルーチンは、Javaで我々が手動で行なっていたスレッド上でのタスク管理を、ほとんど代わりにやってくれます。
あるスレッド上で、長いタスク中の空き時間があれば(例えばデータベースからのレ
Androidのレイアウト概要
# はじめに
普段は、iosエンジニアなのですが、androidも書きたくて、まず参考書を読むことにしました。Androidはなんとなく全体像は知っているので、一番気になるレイアウトの章から読みました。
全部読み終えてから、改めてまとめるつもりなので、
この記事では、その時用のメモのようにラフにまとめます。# ビューのヒエラルキー
ViewGroupeだけがサブビューを持てる。
iosではどのviewもsubviewsプロパティにサブビューを格納できるので、汎用性はiosの方が高いか。# レイアウト
仕事としてはmeasureパスとlayoutパスがあり、
measureパスはサイズ、layoutパスは座標を決定する。measureパスが終わってから、layoutパスがよばれる。
つまり、ビューヒエラルキー内のビューのサイズを全て決定してから、適当な座標に置いていく感じか。## measure()
Viewクラスにはmeasure()メソッドがあり、自身のサイズをこの中で決定する。
`measure()`メソッド内で、`onMeasure(int widthMe
Android TextViewリンク多言語対応するときの色々
# はじめに
androidのTextViewリンク化(多言語)について、自分が下記のものを調べたけど、
うまく行けなかったので、色々を試して、簡単に共有します。
# 問題点
TextView内の多言語リンクうまく表示できないことresourcesファイル
“`
Here is google page
“`xmlファイル
“`
LazyColumn/RowでLazyListStateにアクセスするタイミングを間違えるとパフォーマンスが悪くなる
`LazyColumn` / `LazyRow` の引数である content の `LazyListScope` 内で `LazyListState` へのアクセスすると必要以上に recompose されるようになりパフォーマンスが悪くなる場合があります。
良くない実装と改善するとしたらのコードを書いていきます。
## コード例
### 良くない例
“`kotlin
@Composable
fun VerticalList(items: List, onReachedBottom: () -> Unit) {
val listState = rememberLazyListState()
val currentOnReachedBottom by rememberUpdatedState(onReachedBottom)
LazyColumn(state = listState) {
items(items) {
Text(text = it)
}
if