- 1. 【Coroutinesガイド】例外ハンドリング
- 2. Androidの画面遷移にNavigationを利用する
- 3. DJI Mavic 2 Pro を自作Androidアプリで自律飛行させる(1)~Android Studioの環境構築~
- 4. Firebaseにログイベントを送る(Android編)
- 5. 【Qiita Night】 「バイトルアプリ開発の裏側」
- 6. Qiita Night〜2022年、Androidアプリはどう作る?〜のイベントレポート
- 7. FlutterでTextField(TextFormField)を使うと、大量に再描画される
- 8. 【Flutter】AndroidでSQLiteのテーブルのデータを確認する
- 9. Androidミラーリングツール: ScrcpyHub v1.7.0 をリリースしました
- 10. firebase tracking eventの実装
- 11. 旅先でクラウド上のWindowsサーバにRDP接続
- 12. Firebaseプロジェクトの作成(Flutter)
- 13. テストでandroid.view.InflateException: Binary XML file line #9となっていた時の対処メモ
- 14. Android12で起こったPendingIntentエラーについて(Chuckライブラリ)
- 15. TB(D)RにおけるGPU時間の計測に関する注意; スマホ?でdraw callのGPU時間は計測できない
- 16. Jetpack Compose で Todo アプリを作ってみた
- 17. 【Android】たまに出てくるFirebaseってなんなの?
- 18. 【Flutter】インテグレーションテストでスクリーンショットを自動で取得する。
- 19. Android13から使えるようになるAGSLを試してみた
- 20. Androidエミュレーターの位置情報を好きな位置に設定する方法
【Coroutinesガイド】例外ハンドリング
※ソース記事は[こちら](https://kotlinlang.org/docs/exception-handling.html)
このセクションでは、例外ハンドリングと例外時のキャンセルについて取り扱う。キャンセルされたコルーチンは、suspendの時点で、[CancellationException](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-cancellation-exception/index.html)をスローし、それはコルーチンの仕組みにより無視されていることをすでに知っている。ここでは、例外がキャンセルの間にスローされたり、同じコルーチンの複数の子が例外をスローする場合、何が起こるかを見ていく。
# 例外の伝播
コルーチンビルダーは二つの特徴に分けられる。例外を自動で伝播する([launch](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/k
Androidの画面遷移にNavigationを利用する
# Navigation
Android用の画面遷移ライブラリ
XMLで画面と画面間の接続を定義し、コードから呼び出して利用する
`Activity`で`startActivity`,`startActivityForResult`や`Fragment`で`FragmentManager`を利用する方法だと、
各`Activity`と`Fragment`を確認しないと画面同士の繋がりを把握できないが、
`Navigation`を利用する場合XMLファイルを確認するだけで把握することができる## 準備
https://developer.android.com/guide/navigation/navigation-getting-started
に従う`SafeArgs`と併用すると便利
## 使い所
基本的に画面遷移はこれで実装すると良い
`Activity`や`FragmentManager`は扱いがめんどくさいので`Activity`を1つだけ用意し、
`Fragment`の遷移で画面遷移を実装するのが楽
SingleActivit
DJI Mavic 2 Pro を自作Androidアプリで自律飛行させる(1)~Android Studioの環境構築~
# はじめに
ドローンをAndroidアプリを使って制御する機会があり、アウトプットの目的も含めて投稿させていただきます。
大学の研究室にあるDJIのMavic 2 Proが使えたので、このドローンを自由自在にアプリ上で操作できるようにすることが目的です。
まだまだ勉強中なので、これを通じていろいろなことを身につけていきたいです。どなたかのお役に立てば幸いです。
# ドローン
使用するドローンはMavic 2 Proです。
[DJI Mavic 2のサイト](https://www.dji.com/jp/mavic-2)# 環境
– Android Studio Chipmunk | 2021.2.1 Patch 1
– macOS 12.1※作成したアプリはAndroidのGoogle Pixel 5にインストールし、ドローンのコントローラとして使用します。
# 環境構築
### AndroidStudioのインストール
ここからインストールしました。
インストールの際には[
Firebaseにログイベントを送る(Android編)
# はじめに
アプリ開発を行う際にどのような機能を最も使われているかなどの解析を行う際にFirebaseのEventがとても便利だったので記事を残します。
基本的に公式のドキュメントを読むと手順が一番わかりやすいと思いますがざっくり読みたい人向けにまとめてみます。### 何ができるか
イベントを発行した場所(機能、ページ、ダイアログ表示など)が何件ユーザーが訪れたのか
イベントが発行された時間帯の確認
発行したユーザーの情報他にもあると思いますがよく使う範囲では上記のようなデータを取得、解析することができます。
# 公式ドキュメント
https://firebase.google.com/docs/analytics/events?hl=ja&platform=androidhttps://firebase.google.com/docs/analytics/debugview?hl=ja
# イベントの発行手順
下記のコードを指定箇所に仕込みイベントを発行できます
“`kotlin
FirebaseAnalytics.getInstance(context).log
【Qiita Night】 「バイトルアプリ開発の裏側」
# 概要
2022/07/20(水)に行われた[「Qiita Night2022年、Androidアプリはどう作る?」](https://increments.connpass.com/event/251564/)にて、「バイトルアプリ開発の裏側」という登壇をさせていただきました!
これは、登壇内容を記事化したものになります!Qiitaさんがあげてくださったイベントレポートはこちら!アーカイブも見れます!
https://qiita.com/Qiita/items/0d9bb3d523e36319f1a5
# 登壇内容
今回のQiita Nightのテーマは「2022年Androidアプリはどう作る?」と、いうことで
dipがどのようにバイトルアプリ開発を行っているのか、最近の取り組みを一部紹介させていただきました!
もし参考になりそうな取り組みがあれば、持って帰っていただきみなさんのチームに活かしていただけたら幸いです。### そもそもバイトルアプリとは?
![Qiita Night資料.png](https://qiita-image-store.s3.ap-nort
Qiita Night〜2022年、Androidアプリはどう作る?〜のイベントレポート
# 概要
– 2022年7月20日に開催された[Qiita Night〜2022年、Androidアプリはどう作る?〜](https://increments.connpass.com/event/251564/)のイベントレポートライブ配信のアーカイブ
# コンテンツ
– LT
– 2022年のAndroidプロジェクトセットアップ / @takahirom
– バイトルアプリ開発の裏側 / @hayashidamoka
– Kotlin Nativeってandr
FlutterでTextField(TextFormField)を使うと、大量に再描画される
## 概要
TextFieldもしくはTextFormFieldを設置すると、大量(数十回)に再描写(build)される
※厳密には、MaterialPageRouteでpush(遷移)した先に、TextFieldを設置すると、同現象が発生するこの現象により、FutureBuilderやStreamBuilderと組み合わせると
「TextFieldが更新(focusやchange)される→再描画が走る→Future/StreamBuilderが走る」というループで、永遠にTextFieldへの入力が出来なかったりする。## サンプル
“`dart
// 遷移元
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Page())
);// 遷移先
class Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child
【Flutter】AndroidでSQLiteのテーブルのデータを確認する
Flutterを使って個人で以下のスマホ向けのおみくじアプリ(大御心アプリ)を開発・運用しています。
Androidミラーリングツール: ScrcpyHub v1.7.0 をリリースしました# ScrcpyHub v1.7.0 をリリースしました
![](https://images.unsplash.com/photo-1634334339429-660e1b088026?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxNDIyNzR8MHwxfHNlYXJjaHwyNXx8bWlycm9yfGVufDB8fHx8MTY0NzY1MzIyMQ&ixlib=rb-1.2.1&q=80&w=1080)
# はじめに
ScrcpyHubはAndroidの画面をミラーリングするためのGUIアプリケーションです。ScrcpyHubは以下のGitHubリポジトリで絶賛開発中ですのでよければコントリュート&スター登録お願いします。
https://github.com/kaleidot725/ScrcpyHub
ScrcpyHubはscrcpyというコマンドツールを利用して作成しております。scrcpyのコントリビュートがScrcpyHubの発展にも繋がりますのでぜひチェックしてみてください。
https://github
firebase tracking eventの実装
# 初めに
今回は、`FirebaseTrackingEvent`の汎用的な実装方法を紹介していこうと思います。### 本文
まずは、どの画面からでも呼び出せるように`FirebaseTrackingEvent`の`interface`を作っていきます。“`kotlin
interface TrackingService {
fun track(
trackingEvent: TrackingEvent,
)
}
“`
次に、`interface`の本実装をしていきます。“`kotlin
class TrackingServiceImpl @Inject constructor(
private val firebaseAnalytics: FirebaseAnalytics
) : TrackingService {
override fun track(trackingEvent: TrackingEvent) {
firebaseAnalytics.logEvent(
tra
旅先でクラウド上のWindowsサーバにRDP接続
この記事には、目新しい技術は書かれていません。既成のアプリケーションの使い方のひとつが紹介されているだけです。
旅先でクラウド上のWindowsサーバにRDP接続したいな、という機会は、僕にはたくさんあります。PCを使える状況であればPCを使えば良いのですが、例えば電車の中などでPCを使えない、あるいはPCは使えるけどそれも面倒という場面も僕にはたくさんあります。
こんなときのために、僕にはセルフォンがあるのです。
## 外部からの接続
外部から目的のWindowsサーバにRDPで接続するには、間にSSHが配置され、このSSHがポートフォワードしてくれる、というのが前提です。当然ながら、SSH接続には鍵が必要というのも前提です。
つまり、何の変哲もない一般的な構成です。
## 僕を助けてくれるAndroidアプリ
こういった場面で僕を助けてくれるAndroidアプリは以下の2つです。どちらか1つというわけではなく、2つがタックで助けてくれます。– ConnectBot
– Remote Desktopこれらはよく配慮された機能をもち、かつ余分な機能を持たないという、セルフォン
Firebaseプロジェクトの作成(Flutter)
## 概要
FlutterアプリとFirebaseを接続するための準備をします。
Firebaseの設定~Flutterプロジェクトのビルドが通るようになるまで### 前提
デフォルトのカウントアプリを改変して作っているので、
諸々名前が違かったらごめんなさい!
メモ程度でしかないので、ご参考までに〜## Android
![スクリーンショット 2022-06-30 18.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/ea1c6e5c-6ae0-13ae-c8a5-e70778cf7166.png)/{PROJECT_NAME}/android/app/src/main/AndroidManifest.xml
にある
“`
“`PACKAGE_NAMEをコピーし、
テストでandroid.view.InflateException: Binary XML file line #9となっていた時の対処メモ
# やりたかったこと
Navigatorのテストを書きたくてやってみましたが、動かなかったのでメモ
## 動かなかったコード
“`Kotlin
@RunWith(AndroidJUnit4::class)
class NavigatorTest {
@Test
fun testNavigation(){
val navController = TestNavHostController(ApplicationProvider.getApplicationContext())val topScenario = launchFragmentInContainer
() topScenario.onFragment{fragment ->
navController.setGraph(R.navigation.nav_graph)
Navigation.setViewNavController(fragment.requireView(),navCo
Android12で起こったPendingIntentエラーについて(Chuckライブラリ)
# はじめに
Android12からPendingIntentにフラグの設定が必要になったのですが、使用していた[Chuckライブラリ](https://github.com/jgilfelt/chuck)にもその影響がありエラーになってしまいました。
今回はそのエラーの対応方法についてご紹介します。# 開発環境
PC:MacBook Pro
OS:macOS BigSur
Android Studio:Arctic Fox 2021.1.1# PendingIntentのエラー対応方法
SDKバージョンを31にしてアプリを実行した際に、PendingIntentを使用している箇所で以下のようなエラーが出る場合があります。
“`
PendingIntentを作成するときにFLAG_IMMUTABLEまたはFLAG_MUTABLEのいずれかを指定する必要があります。
FLAG_IMMUTABLEの使用を強く検討してください。
たとえば、インライン応答やバブルで使用する必要がある場合など、
一部の機能がPendingIntentの変更可能性に依存している場合にのみ、FLAG_MU
TB(D)RにおけるGPU時間の計測に関する注意; スマホ?でdraw callのGPU時間は計測できない
クリックベイトサムネイル:
![RenderDoc Event Browser](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100016/b975b455-1140-3bd8-4341-b9ece3e5c56c.png “RenderDoc Event Browser; スマホで Duration の値に意味はない”)
これだけでは何の説得力も無いので, ここではこれらGPUアーキテクチャの動作をはじめ, ドライバの開発者の発言やソースコードの引用を含めた様々な根拠や状況証拠などを挙げて論証する.# TL;DR
##### 結論
モバイル端末のGPUにおいて, render pass 内のGPUタイムスタンプは, 何らかの意味をなす値を持たない:
– draw call(s) ごとのGPU時間の計測を考えることはできない; そのように呼べる実行の単位そのものが, 存在しない.
– 意味をもって計測できるグラフィクスパイプラインのGPU時間の最小の単位は render pass (≈レンダーターゲット
Jetpack Compose で Todo アプリを作ってみた
Jetpack Compose は革命かもしれません。
![Reflector Recording.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/c6166770-b97c-a7d5-af6f-d6ed56140d33.gif)
View に関わるファイルはこれだけ。
RecyclerView, RecyclerViewAdapter, ViewHolder など不要です。
“`kotlin
@Composable
fun TodoScreen(
viewModel: TodoViewModel = hiltViewModel()
) {val items by viewModel.items.collectAsStateWithLifecycle(initialValue = emptyList())
val target by viewModel.targetColumn(
modifier = Modifier.fillMaxSize(),
【Android】たまに出てくるFirebaseってなんなの?
# はじめに
Android開発をやっていてたまに目にする **「Firebase」** という言葉が気になったので、調べたものを記事に残します
Firebaseの公式サイトを見て、どういったものなのかをまとめたものです# Firebaseとは
Firebase公式サイトでは
>Firebase は、優れたアプリを開発し、ユーザーベースを拡大し、収益を高めるためのツールです。インフラ構築に手間取ることなくビジネスを収益化し、ユーザーにとっての利便性に集中できます。とあります。
アプリで使われる、クラウドから提供するサービスの一つ ということですね
Javaコードを書くだけで簡単にサーバーとのやり取りができるのが魅力的ですね# Android プロジェクトに Firebase を追加する
Firebaseをアプリに追加するには、Firebaseコンソールから Firebase構成ファイルをダウンロードし、Androidプロジェクトに移動させるなどの、タスクを行います方法1
1.Firebaseプロジェクトを作成し、androidアプリに接続します
2.Firebas
【Flutter】インテグレーションテストでスクリーンショットを自動で取得する。
Flutterを使って個人で以下のスマホ向けのおみくじアプリ(大御心アプリ)を開発・運用しています。
Android13から使えるようになるAGSL(Android Graphics Shader Language)を試してみました。
Shaderの導入を検討している方、導入してみたいけど何をすればいいか悩んでいる方の助けになれば幸いです。# 開発環境
– Macbook Pro OS Catalina 10.15.7
– Android Studio Electric Eel | 2022.1.1 Canary 8
– Kotlin
– Pixel6 Android13 β(エミュレータ)# 参考元
[公式](https://developer.android.com/guide/topics/graphics/agsl/using-agsl#kotlin)を参考に試しました。# STEP1
いつもどおり新規にプロジェクトを作成します。
今回はJetpack Composeではなくxmlで作成しています。# STEP2
カスタムViewを作成してactivity_main.xmlにサンプルとして320dp x 240dpの作成したカスタムViewを配置します。
公式
Androidエミュレーターの位置情報を好きな位置に設定する方法
今回はAndroidエミュレーターの位置情報を好きな位置に設定する方法を書いていこうと思います。
# Androidエミュレーターの位置情報を設定方法
![スクリーンショット 2022-07-23 15.42.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/dc04963e-1a46-c79b-00d6-f5ea36bc7bc4.png)
まずはエミュレーターを起動し、一番右の三点リーダーをクリックします。
そうするとこの様な画面が立ち上がります。
![スクリーンショット 2022-07-23 15.57.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/8eb81fe5-14f5-70eb-66fe-e6efc638d1f9.png)
位置情報を設定したい箇所にクリックします。
その後右下のSetLocationをクリックすると位置情報が変更されます。簡単に位置情報を変