- 1. 未経験者がKotlinでおうちのIoT化アプリを作ってみた
- 2. UnityでFirebase AuthenticationとFirestoreのサンプル
- 3. [Flutter]Timer.periodicで現在時刻を表示したらエラーが出続けた
- 4. [Android] ホーム起動後すぐにServiceからActivity起動しようとすると5秒遅れる
- 5. 【Android】URL から画像をダウンロードして内部ストレージに保存する方法
- 6. 【開発レポート】捨てるTODOを1週間で作ろうとした話
- 7. AndroidStudioでThe application could not be installed.のエラーが出てしまったとき
- 8. AdMob バナー広告の読み込み時にプレースホルダーを表示する
- 9. #1 Kotlin Koans Introduction/Hello,world 解説
- 10. 私のKotlin学習法(初学者向け)
- 11. [Android] logcatから問題解析してみよう
- 12. HMS Account Kitの利用時にHuaweiIdAuthButtonも合わせて使いましょう
- 13. ProgressBarで待機中を表示
- 14. 【Flutter】l10n ローカライゼーション(多言語対応)に対応する
- 15. Android Studio 4.0.1でRクラスを確認する方法
- 16. HMS Account Kit実装入門(Authorization Code編)
- 17. Android の Room と Windows の EF Core を比較してみた
- 18. HMS Account Kit実装入門
- 19. Android でのシリアル通信アプリの開発
- 20. GCSのキャッシュ
未経験者がKotlinでおうちのIoT化アプリを作ってみた
#AndroidアプリとIoT
[これまでセンサとRaspberryPiを使って我が家のIoT化を進めて来ましたが](https://qiita.com/c60evaporator/items/283d0569eba58830f86e)、収集したデータの確認にPCを起動するのが面倒なので、**スマホで状況確認したい**
という(個人的)要望が高まってきました。そこで今回は、上記の要望に応えるためにAndroidアプリをKotlinで作成してみました。
![all.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/8b917693-05d5-8d3d-8fef-d258bf630930.png)Kotlin・スマホアプリはおろか、JavaやWebアプリの開発経験すらないので手探りでの実装となりましたが、
私のように
**「一定のプログラミング経験はあるけど、スマホアプリは敷居が高そう…」**
という方の指針となる記事を目指したいと思います。間違い等あれば指摘していただければと思い
UnityでFirebase AuthenticationとFirestoreのサンプル
# はじめに
最近、個人でミニゲームを作成していて裏側でFirebaseを使用しています。
それで認証周りとFirestoreの疎通を検証したのでそのサンプルコードを載せておきます。
あと、エラーの遭遇とかも多々あったのでその辺りも記載しています。基本ボタンをポチッとするだけで認証通ってゲームデータにアクセスできる作りを想定して組んでいます。
なのでメール認証とか電話番号認証とかはスルーしています。~~Androidも合わせて作るつもりでしたが、iOSが終わって続けてAndroidもやろうとしたらビルドでこけて解消したときには心折れていたので、匿名(ゲストユーザー)の実装しかしていません。
週末あたりに対応して記事更新しておきます。~~
**※2020/10/04追記
Androidも認証追加しました。**以下の認証フローで確認しました。
ゲストから他の認証行った場合にユーザーをリンクさせる処理は実装しています。
複数アカウントの結合は今のところ必要な機能ではなかったので実装していません。* iOS
* 匿名(ゲストユーザー)
* Sign I
[Flutter]Timer.periodicで現在時刻を表示したらエラーが出続けた
#Timer.periodicでエラー
Flutter開発の勉強中、現在時刻の表示を行った後に画面遷移をしたら、エラーが出力され続ける現象に遭遇しました。
なかなか困ってしまったので、忘れないように対処法のメモ書きを残します。
dispose内でちゃんとキャンセルを書かないと停止されず、裏で動き続けちゃう様です。“`dart:timer.dart
import ‘package:flutter/material.dart’;
import ‘package:intl/intl.dart’;
import ‘dart:async’;class TimerPage extends StatefulWidget {
@override
StatecreateState() {
return _TimerState();
}
}class _TimerState extends State
{
String _nowtime = ”;
var formatter = DateFormat(‘yy
[Android] ホーム起動後すぐにServiceからActivity起動しようとすると5秒遅れる
## はじめに
[[Android] logcatから問題解析してみよう](https://qiita.com/jda7407/items/269a229b49b31623ee9d) を書いたのですが、その実例として解析の過程をまとめました。
ちなみに、5秒のDelayの原因はAndroidの仕様でした。
## 背景
ホームキーが押された時に発行されるIntent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)をサービスで拾ってActivityを起動させるアプリを作った。
https://github.com/x-satoru/ActivityTestしかし、ホーム画面表示後すぐにホームキー押すとActivity起動が遅れる問題に遭遇した
logcatから原因を調査する## ログ取り
問題発生時の周辺のログを取得
“`
05-03 12:17:02.536 5465 5465 D HomeKeyReceiverService: onReceive Home Intent
05-03 12:17:02.536 5465 5465 D H
【Android】URL から画像をダウンロードして内部ストレージに保存する方法
# はじめに
Android アプリで、URL から画像をダウンロード → 内部ストレージに保存をやりたくていろいろ調べました。記事によって書き方が多種多様で、記事どおりにしても意図した動きにならなかったりしたのですが、試行錯誤して最終的にうまくいったので備忘としてメモします。
# Android アプリでデータを保存するときの選択肢
Android アプリでデータを保存する場合、保存先として次の4つの選択肢があります。
| 保存場所 | 説明 |
|—|—|
| 内部ファイルストレージ | 端末のファイルシステムにアプリのプライベートファイルを保存。 |
| 外部ファイルストレージ | 共有外部ファイルシステムにファイルを保存。通常は写真などの共有ユーザー ファイル用。 |
| 共有の環境設定 | キーと値のペアでプライベートプリミティブデータを保存。 |
| データベース | プライベートデータベースに構造化データを保存。 |出典:[データとファイルのストレージの概要](https://developer.android.com/guide/topics/da
【開発レポート】捨てるTODOを1週間で作ろうとした話
![todo_cover.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401916/b81091b7-b1d2-5d19-6810-f981565d179e.png)
Unityを使って普通のアプリを作ってみたくてTodo管理アプリを作ってみました。
その名も「捨てるTODO」です!
今回はその開発の流れや開発したアプリについて紹介していきたいと思います。ブログ本文はこちらです
https://tedenglish.site/todoapp-dev-report/
AndroidStudioでThe application could not be installed.のエラーが出てしまったとき
#エラー内容
AndroidStudioでエミュレーターを動作させようとしたら以下のエラーが出ました。
Clean ProjectをしてもRunできない状態でした。“`
The application could not be installed.
Installation failed due to: ”cmd package install-create -r -t –full -S 2681626′ returns error ‘Unknown failure: cmd: Can’t find service: package”
“`#解決方法
– Tool>AVDManagerから使用していたAVDをCold Boot Now
– Clean Project実行
– もう一度Runの手順で動くようになりました。
![AVDManager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648333/444c67ce-1abb-d8f0-2128-2aebf4310713.p
AdMob バナー広告の読み込み時にプレースホルダーを表示する
## 課題
AndroidでAdMobバナー広告は[アダプティブ バナー](https://developers.google.com/admob/android/banner/adaptive?hl=ja)使用します。
よくある広告バナーをアプリ上部or下部に常時表示するアプリでは、リンク先の通り以下のように実装します。(レイアウトの呼び出しはDataBindingを使用しています。)“`Kotlin:MainActivity
class MainActivity : AppCompatActivity(R.layout.activity_main) {
…
private lateinit var adView: AdView
private val adSize: AdSize
get() {
val display = windowManager.defaultDisplay
val outMetrics = DisplayMetrics()
displa
#1 Kotlin Koans Introduction/Hello,world 解説
# はじめに
Kotlin公式リファレンスのKotlin Koansの解説記事です。
Kotlin Koansを通して、Kotlinを学習される人の参考になれば幸いです。
ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**一度各自で挑戦してから、お目通し頂ければと思います:grinning:
# Introduction/Hello,worldの解説
[Kotlin Koans Introduction/Hello,world](https://play.kotlinlang.org/koans/Introduction/Hello,%20world!/Task.kt) の解説です。
随時本サイトの内容を引用させていただきます。まずは、右側の本文を見てみましょう。
> Take a look at function syntax and make the function `start` return the string `”OK”`.
> In the tasks the function `TODO()`
私のKotlin学習法(初学者向け)
# はじめに
Androidエンジニアとして働いております、Goです:smile:
今回は私がどのようにKotlinを学習したのかをお伝えしたいと思います。
皆さんのKotlinの学習の一助となれば幸いです:muscle:
# 対象者
* Kotlinの学習を始めようとしている方
* Kotlinの学習の方法で悩んでいる方
* Androidアプリを作ってみたいと思われている方# Kotlinって何?
KotlinはJavaの後継言語としての活躍を期待して誕生しました。
1番の特徴は、Javaと完全な**相互運用性**があるということです。
つまり、**既存のJavaのライブラリが使える!**ということです。
Javaは世界中の多くのエンジニアが利用しており、様々な場面で使われています。
そのため、便利なライブラリが多く準備されているのです。
これらの恩恵を被ることができるのは、Kotlinの大きな特徴と言えるでしょう。
(※KotlinはJVM(Java Virtual Machine)というJavaの実行環境で動作する特徴もあります。)
また、
[Android] logcatから問題解析してみよう
## はじめに
Androidアプリ開発をしていて問題が発生した場合、解決策は2つあります。
1.ググる
2.ログから解析1は誰でも出来る事ですが、ドンピシャな回答があるとは限りません。
今回はログから解析する場合、どんな感じで読み解けばよいのか、解説していきます。## logcatで出力されるログについて
logcatのログは “`timestamp PID TID log-level“` メッセージ というように表示される
例えばこんなログ
“`
05-03 12:17:02.536 1860 12249 I ActivityManager: START u0 {flg=0x10008000 cmp=com.jp.pripri.activitytest/.MainActivity} from uid 10075
“`– timestamp: 05-03 12:15:04.666
– PID(プロセスID): 1860
– TID(スレッドID): 4144
– log-level: Info
– メッセージ: ActivityManager: ST
HMS Account Kitの利用時にHuaweiIdAuthButtonも合わせて使いましょう
# ログイン画面実装時の厄介な作業
Androidのレイアウトの実装時に、開発者がよく直面する問題の一つはUIパーツ実装の厄介さです。たとえば、このボタンの実装は技術的に全然難しくないのに、marginとか、paddingとか、パーツの間隔とか、いろいろ定義しなければならないし、デザイナーによってデザインが微妙に違うし、同じボタンのはずなのに、なぜか各画面ではデザインが統一されていない、といったことがよくあるのではないでしょうか?HuaweiIdAuthButtonはこういった悩みを解放してくれるHMSの贈り物です。
# HUAWEIログインのボタンデザインは定められている
[HMS Account Kit実装入門](https://qiita.com/Rei_2020/items/81001ffc6299e56401c8)と[HMS Account Kit実装入門(Authorization Code編)](https://qiita.com/Rei_2020/items/3eb5cb484be0cea9c640)でも述べましたが、ファーウェイはこのログインボタンのデザインを細
ProgressBarで待機中を表示
## はじめに
何らかのWEB APIをリクエストして処理待ち。
そういことよくありますよね。
そういった待機中なのを示すのに、ProgressBarを使ってみました。## [ProgressBar](https://developer.android.com/reference/android/widget/ProgressBar)
ProgressBarはいくつかのstyleがあり、またコードを書かなくてもレイアウトで設定するだけで動きます。– Widget.ProgressBar.Horizontal
– Widget.ProgressBar.Small
– Widget.ProgressBar.Large
– Widget.ProgressBar.Inverse
– Widget.ProgressBar.Small.Inverse
– Widget.ProgressBar.Large.Inverseこれらのstyleがあります。
今回は Widget.ProgressBar.Large を使いました。## デモ
簡単なサンプルを作成しました。![progre
【Flutter】l10n ローカライゼーション(多言語対応)に対応する
## Flutterのstableが1.22.0にアップデート
[1.22.0](https://medium.com/flutter/announcing-flutter-1-22-44f146009e5f)のアップデートに伴い、多言語対応が含まれました。
なので、早速試してみました。[公式のドキュメントはこちら](https://docs.google.com/document/d/10e0saTfAv32OZLRmONy866vnaw0I2jwL8zukykpgWBc/edit)
## 完成イメージはこちら
[https://github.com/Tetsukick/enGolf](https://github.com/Tetsukick/enGolf)
[App Store はこちら](https://apps.apple.com/jp/app/engolf/id1507668448?l=en)
[Google Play Store はこちら](https://play.google.com/store/apps/details?id=com.tetsukick.engo
Android Studio 4.0.1でRクラスを確認する方法
Android開発でお馴染みの`R.java`(Rクラス)ですが、Android Studio 3.6からR.java自体は生成されず、Rクラスのバイトコードが生成される方式に変わったようです。
![スクリーンショット 2020-10-02 0.44.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/da945fd0-6247-ea5f-ca92-d4dacab1892c.png)
https://android-developers.googleblog.com/2020/02/android-studio-36.htmlこのことを知らず、先日Rクラスを確認しようとして困ったので、確認方法を記載したいと思います。
# 場所
`R.java` は生成されませんが、`R.txt` として生成されているようでした。場所は
“`
app/build/intermediates/runtime_symbol_list/debug/R.txt
“`にありました。 `debug` の
HMS Account Kit実装入門(Authorization Code編)
# 前書き
[HMS Account Kit実装入門](https://qiita.com/Rei_2020/items/81001ffc6299e56401c8)でIDトークンによるユーザー認証を紹介しました。本章はAuthorization Codeによるユーザー認証と、IDトークンによるユーザー認証との違いを紹介したいと思います。# 前準備
AppGallery ConnectでAccount Kitの設定ページに入り、redirect_uriをセットします。サーバー側がユーザー情報をファーウェイのアカウントサーバーから取得する場合は設定しなければなりません(APIを呼び出すのに必須なパラメータであるため)。
# 実装
こちらはオフィシャルサイト
Android の Room と Windows の EF Core を比較してみた
# 背景
最近、現場で現行アプリ(Android)の Windows 版を新たに別途開発する仕事をしております。
その中で、DB ライブラリの Room で書かれたコードを EF Core に置き換える作業をしました。
それぞれのライブラリの理解を深める良い機会となったので、メモとして残します。
なお、DB の基本やライブラリの導入方法、細かな文法については説明しませんのでご了承ください。# 使用したサンプル
以下のサイトの例をサンプルとして使用させていただきました。
[Room を使用してローカル データベースにデータを保存する | Android デベロッパー | Android Developers](https://developer.android.com/training/data-storage/room?hl=ja)# エンティティ
まず、こちらが Room(Kotlin) のコードです。
“`kotlin:User.kt
@Entity(tableName = “user”)
data class User(
@PrimaryKey(
HMS Account Kit実装入門
# HMS Account Kitの概要
最近のアプリはだいたいサーバーと連携して動作します。そしてユーザー登録が必要だったり、会員登録しないとお得なサービスが使えなかったり、といったパターンが多いです。その新規登録にあたって、どのように本人確認を行うか、また、ユーザーに負担をかけずに新規登録をしてもらうか、というのは考えなければならない問題点です。
そこで登場するのがソーシャルログインというのもです。こういう画面を見たことありますか?
第三者のプラットフォーム経由で新規登録・ログインを行うのがソーシャルログインです。HUAWEI Account KitはGoogleやLINE、Twitter、
Android でのシリアル通信アプリの開発
AndroidでUSBシリアル通信(その1)ハードウェア・ソフトウェア構成等
先ずは情報収集
https://qiita.com/kerobot/items/ac8fa69955f9d3414f81
https://github.com/ksksue/AndroidSerialTerminalUSBシリアル通信アプリはあるものの、TeraTerm マクロみたいのはないのかなと…
https://play.google.com/store/apps/details?id=de.kai_morich.serial_usb_terminal&hl=ja
https://play.google.com/store/apps/details?id=jp.sugnakys.usbserialconsole&hl=ja
https://applion.jp/android/word/USB%20Serial%20Monitor%20Lite/
GCSのキャッシュ
なんでかよくわからないけど、GCSに格納したファイルを更新してアクセスしてもキャッシュが残っているせいで更新されない!
no-cacheの設定しても反映されない!
AndroidアプリからGCSに格納したJSONを見たいのに反映されないなんて、困る!そんな時は、パスの最後に`?uuid=適当な文字列`をつけたら更新される裏技を教えてもらったので、早速やってみると見事最新データが取得できましたよ:relaxed:
“`
var path = getString(R.string.json_path) + “?uuid=” + getDate(“yyyyMMddhhmmss”)
“`