- 0.1. android メモ
- 0.2. ImageView に画像データをいい感じに渡すカッコいいコード
- 0.3. [Flutter] Android端末で、Bluetoothペアリング済みの端末の情報を取得する方法
- 0.4. スマホの充電を騙くらかすアプリを作ったらAppleに怒られた話
- 0.5. GraphQLのPOSTをするときに馬鹿をやらかした話
- 0.6. SharedPreferencesがUIスレッドをブロックするってマジ!?
- 0.7. GalaxyWatch4で開発者モードを有効にする手順
- 0.8. システムの通知設定からアプリを起動させる方法
- 0.9. Androidスマホで簡易監視カメラをつくる
- 0.10. WordPress テーマ使用でのランディングページ制作についてメリット・デメリットなど【LP】
- 0.11. 個人的なモバイル向けのアイコン対応
- 0.12. MutableStateの3通りの宣言方法とその使い分けを考える
- 0.13. Jetpack Compose State Practices
- 0.14. フードコートで必ず見る”アレ”を再現するWebアプリを作りました
- 0.15. Androidアプリでモバイルデータ通信とWi-Fiを同時に使う
- 0.16. ビルドエラー Algorithm HmacPBESHA256 not available
- 0.17. Jetpack ComposeでMaterial3のTopAppBarをStatusBarの下まで表示させる
- 0.18. 【個人開発】共有可能なメモアプリを作った話 使用パッケージも紹介【Flutter】
- 0.19. Androidで写真にテキストを合成する
- 0.20. Firebase Management APIを使ってFirebaseプロジェクトの登録をする方法
- 1. なぜ調べたのか?
- 2. Firebase Management APIとは?
- 3. 利用したAPIの簡単な説明
android メモ
# Android メモ
## よく忘れるコマンド
“`
C:\Users\th-yano\AppData\Local\Android\Sdk\emulator\emulator -avd Pixel_5_API_30 -netdelay none -netspeed full -no-snapshot -show-kerneladb exec-out screencap -p > display.png
“`“`shell
ps -eo user,pid,ppid,cpu,pcpu,virt,rss,args –sort -pcpu | head -5
ps -aT `ps -ef |grep kot | awk ‘{print $2}’`
“`## スタックトレース
gdbで見た場合
“`
(gdb) thread apply all btThread 19 (Thread 4398.4422):
#0 0xec9f1b99 in ?? ()
Backtrace stopped:ImageView に画像データをいい感じに渡すカッコいいコード
with で Android エンジニアをしている @t2low です。
かなり前の話です。
自分では**カッコいい感じ**のコードが書けたと思ったのですが、その後活用されずに眠っているので供養のつもりで記事にします。
(※ 実際のコードとは異なる部分があります)## コードを書いたきっかけ
ある画面で API から返された画像データ(URL)があれば読み込んで表示し、なければアプリ内の画像(drawable)を表示するという処理が必要になりました。
愚直に書くと次のようなコードになるかと思います。
(※ `fun ImageView.loadImage(url: URL)` という URL を渡すと画像を読み込む ImageView の拡張関数が生えてると思ってください)“`kotlin
if (iconUrl != null)
iconImageView.loadImage(iconUrl)
else
iconImageView.setImageResource(R.drawable.something)
“`この画像データの種類に応じて処理を分
[Flutter] Android端末で、Bluetoothペアリング済みの端末の情報を取得する方法
# はじめに
Flutterアプリで、Android端末とペアリング済みの端末の情報(端末名、macアドレス)を取得する方法について調べていたのですが、
MethodChannelを利用して、Kotlin側から取得する方法が楽に実装できそうだったので、その際の手順を残そうと思います。※iOSでの実装は今回触れません。
# 実装
まずはDart側から実装していきます。
MethodChannelを使い任意のタイミングでKotlin側のプログラムを呼び出します。“`main.dart
FuturegetPairingDeviceInfo() {
var res = MethodChannel(‘com.sample_project/bluetooth’)
.invokeMethod(‘get_pairing_device_info’, {});
return res;
}
“`続いてKotlin側で、Dart側から呼び出されるMethodChannelを作成していきます。
Bluetoothペアリング済みの端スマホの充電を騙くらかすアプリを作ったらAppleに怒られた話
本記事はクソアプリAdvent Calendar 13日目の記事です。
私は6月からモバイルアプリ開発の道に飛び込んだ新参者です。
普段は個人開発でFlutterでのアプリをひたすら作成しています。「クソアプリAdvent Calendarとは、なんて素敵な試みだろう、これは参加するしかない!」
そう思い今回初参加させていただきます。
本記事では、作成したクソアプリの紹介ののち、
余談としてAppleに怒られた話を致します。
「こんなアプリを作ると、こういうリジェクト理由で割とガチ目に怒られる」
という一つの事例として捉えていただければと思います。##作成したアプリ##
ちょっと気まずい相手からLINEの連絡先を聞かれ、
「スマホの充電が切れていたらいいのに、、、」
こう思ったことありませんか?
そんな時のために、いつでもどこでも充電切れ画面を表示するアプリを作成しました!
![Android_FeatureGraphic_ja.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c
GraphQLのPOSTをするときに馬鹿をやらかした話
#はじめに
Heroku Postgreに対して外部から(Herokuアプリ外のサービスから)データを挿入したいという状況の時、
Hasuraはとても役に立ちます。
今回は、そのPOST操作を行おうとしたときに出会った魑魅魍魎を紹介しようと思います。##Hasuraってなに?
この記事に丸投げします。私はここから学びました。
https://qiita.com/maaz118/items/9e198ea91ad8fc624491また、HasuraはHerokuに対して強力なサポートをしており、
ワンクリックでHeroku Postgreを利用したGraphQLサーバーを立ち上げてくれます。
https://hasura.io/learn/ja/graphql/hasura/setup/##今回実装したかった事
AndroidアプリケーションからHeroku Postgreに対してデータの挿入を行いたい
それなら、GraphQLのmutationを利用して挿入しようじゃないか##おっと
今回発行するGraphQL Queryは以下のような感じだ。keyの命名と値の型の対応SharedPreferencesがUIスレッドをブロックするってマジ!?
SharedPreferencesって変更差分はメモリ上で保持していて、最初の読み出しはどうしようもないだろうけど、そのあとはapplyとか使っていれば安全だと思っていた時期が俺にもありました。しかしDataStoreの説明で
https://developer.android.com/codelabs/android-preferences-datastore?hl=ja#3
> SharedPreferences には、UI スレッドで呼び出しても安全に見える同期 API がありますが、これは実際にはディスク I/O オペレーションを行います。さらに、apply() は fsync() で UI スレッドをブロックします。fsync() 呼び出しの保留は、サービスの開始と停止、およびアプリケーションの任意の場所でアクティビティが開始または停止するたびにトリガーされます。UI スレッドは、apply() によってスケジュールされた保留中の fsync() 呼び出しによってブロックされます。多くの場合、ANR の発生元になります。
**な、なんだってー**
マジかよ!?`app
GalaxyWatch4で開発者モードを有効にする手順
##「システム」の項目が見当たらない
WearOSに限らずAndroidで実機を使って開発を行う際、「ビルド番号」の項目を連打して開発者モードを有効にする必要があることはご存知だと思います。
https://developer.android.com/training/wearables/apps/debugging?hl=ja#enable-dev-options
GalaxyWatch4でも同様に開発者モードを有効にしようとすると、設定内に「システム」や「ビルド番号」の項目がないことに気がつきます。
↑「システム」の項目が見当たらないGalaxyWatch4では開発者モードを有効にする手順
システムの通知設定からアプリを起動させる方法
Androidではシステム設定にあるアプリの通知設定画面にアプリの設定画面を起動するリンクを設置することができます。
「アプリ内のその他の設定」というのがそれになります。
残念ながら「**アプリ内のその他の設定**」というテキストを変更することはできません。|設定なしの場合|設定ありの場合|
|:-:|:-:|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/e547ca1f-2298-521b-3775-e0c8772b8136.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/af360f0b-0e58-6bd2-114f-18262137d777.png)|また、通知チャンネルごとの設定画面にも同様のリンクを表示させることができます。
|設定なしの場合|設定ありの場合|
|:-:|:-:|
|![](https://qiita-image-store.s3.ap-northeAndroidスマホで簡易監視カメラをつくる
# はじめに
こちらは[SORACOM Advent Calendar 2021](https://qiita.com/advent-calendar/2021/soracom) 12日目の記事です。
非常にハイレベルな投稿が続く中、図々しく2年連続ヒヨッコ投稿で失礼します。本記事は [IoTLT広島特別編 with HiBiS](https://iotlt.connpass.com/event/227874/) のLTで発表した装置の実装方法について説明しています。
イベントの様子、内容については以下をご覧ください。– [イベントの動画(YouTube)](https://www.youtube.com/watch?v=qeuLgFWURoo&t=2623)
– [発表資料(Speaker Deck)](https://speakerdeck.com/ozk009/sumahodejian-dan-iot)
– [紹介ブログ](https://fugiters.net/blog/index.php/2021/11/14/sp_iot/)# 概要
最近、AndroidスマホWordPress テーマ使用でのランディングページ制作についてメリット・デメリットなど【LP】
以下ページ、知り合いがWordpressを使って作ったランディングページなのであるが、
https://hukugyou-diamond.com/lp/engineer/
たまたまエンジニア関連の記事である奇遇性は置いておくとして(笑)
メリット・デメリットそれぞれ解説していくとする。
※これはあくまで本質的なところを捉えて書いており、そこまで詳しい技術面に関しては書いていない。
■メリット■
操作が簡単
操作は言うまでもなく簡単であり、初心者の方でも視覚的に操作できるため、参入障壁を下げることが出来る点、効果的である。
綺麗なテンプレートが用意されている
比較的整ったテンプレートや素材・ボタンなど用意されているため、余計な手間・タスクを省くことが出来る。
また、初心者の方にとっては品質向上にもつながってくるため、クオリティーを求める手段の1つにもなる。■デメリット■
スキルがあまり身に付かない
HTMLやCSS、Javascriptなどのスキルはあまり身に付かない。
例えば、ある1色の色の素材しかない場合に、HTMLの色コードを変更する必要個人的なモバイル向けのアイコン対応
# 前提
– 色んな記事あるけど、個人的にこれでいいやといった内容を整理
– リリース時にしか対応しないので、しばらくやらないと忘れるので半分以上自分用# 手始めに
1. まずは1024×1024でアイコン素材を作成(ココは自力で頑張る)
2. iOSは矩形(勝手に丸みを帯びてくれる)
![icon_ios.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/45ec7c8d-0382-18e9-ecb4-5e4787b6e9df.png)
3. Androidは角に丸み(勝手に丸みを帯びてくれない)
– (個人的にphotoshop的にradius:200px)
![icon_android.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/bc60e78e-670d-2286-c3d1-e75d50977628.png)2. 各種アイコン
MutableStateの3通りの宣言方法とその使い分けを考える
Jetpack ComposeのComposable内でMutableStateを宣言する場合、大きく3通りの記述方法があります。
“`kotlin
val mutableState = remember { mutableStateOf(default) }
var value by remember { mutableStateOf(default) }
val (value, setValue) = remember { mutableStateOf(default) }
“`
https://developer.android.com/jetpack/compose/state#state-in-composables公式ドキュメントによれば「機能は同じだから状況に応じて読みやすいものを使ってね」とのことですが、実際のところ、どう使い分けるべきでしょうか?
# 結論
– 基本的にはdelegated propertiesを使うのが良さそう
– `var value by remember { mutableStateOf(default) }`
– stateJetpack Compose State Practices
The English version is available here.
https://medium.com/@takahirom/jetpack-compose-state-guideline-494d467b6e76
*この記事ではJetpack Composeの公式から提供されているものをプラクティス形式でリストにして紹介します*
以下のセッションやコードラボには大切なプラクティスがたくさんあるのですが、あまり広まっておらずリスト化はされていないので、それを拾って、DO, DON’T形式でまとめることによってプロダクションでComposeの開発をスムーズにしたいなと思いました。
https://developer.android.com/codelabs/jetpack-compose-state#0
https://developer.android.com/jetpack/compose/state#viewmodel-state
# Composeの基本
おそら
フードコートで必ず見る”アレ”を再現するWebアプリを作りました
フードコートの”アレ”をスマホで再現できるアプリを作りました。
https://tools.ic731.net/food_court
[クソアプリ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/kuso-app)の**11日目**です。
# アプリについて
皆さんフードコートって行ったことありますか?ありますよね(強制)
イオンモールなどの一区画に多くの飲食店が出店しているやつです。銀だこ、丸亀製麺、リンガーハット、オムライス、ビビンバ、クレープ、アイス…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/c0a5d997-7118-2927-166f-77249afe44e0.png)
そんなフードコートですが”アレ”見ますよね?
…そう。**食事ができたことを知らせるブザー**です。(以下いらすとや様画像)
![image.png](https://qiita-image-store.s3.apAndroidアプリでモバイルデータ通信とWi-Fiを同時に使う
## はじめに
Androidアプリでモバイルデータ通信とWi-FIを同時に使用します。
(TCPサーバを立てたり、GETリクエストを送ったりします)
本記事ではJavaを使用しAPIレベルは21以上とします。開発者オプションが必須です。## 前提
### 開発者オプションの設定「開発者向けオプション」→「ネットワーク」→「モバイルデータを常にON」を「オン」にすること。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653543/e381edad-0eb0-972b-e497-8e91d93dc373.png)### permissionについて
INTERNET、ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE、CHANGE_NETWORK_STATEを使用する。
いずれも保護レベルが「normal」のpermissionである。“`AndroidManifest.xml
ビルドエラー Algorithm HmacPBESHA256 not available
#FlutterでAndroidのビルド時にエラー
java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not availableどうやらJDKのバージョンに関するエラーみたい。
##解決法
“`
keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key -J-Dkeystore.pkcs12.legacy
“`
署名鍵を作るときに、このコマンドを叩いてkey.jksを生成すれば解決しました。Jetpack ComposeでMaterial3のTopAppBarをStatusBarの下まで表示させる
先日投稿した、[Material 3で大きく変わったTopAppBarをJetpack Composeで実装してみる](https://qiita.com/Nabe1216/items/0823dc7ebfb5d616f9c1 ) の補足記事になります。
前回の記事で紹介した `androidx.compose.material3` の TopAppBar ですが、そのまま実装すると StatusBar の下まで表示させる Edge to edge の対応ができません。
`androidx.compose.material` の方は Accompanist の [Inset](https://google.github.io/accompanist/insets/) がその辺りの実装をライブラリとして提供してくれていますが、`androidx.compose.material3` の方は存在しない ( [issue](https://github.com/google/accompanist/issues/836) は立っている) ので実装が必要になります。
Accompani
【個人開発】共有可能なメモアプリを作った話 使用パッケージも紹介【Flutter】
##はじめに
シンプルでありながら多彩な用途に使える共有可能なメモアプリ **Notespod** を開発、リリースしました。現在のところAndroid版のみとなっています。https://play.google.com/store/apps/details?id=com.karas.notespod
##経歴
といっても実務経験はなく、趣味で React(Next.js) + Django Rest Framework でブログを作ったことがあるだけです。次はどうしようかと考えたときに、まだ未経験なモバイル開発をやってみようと思いました。
##Flutterかい?
はいそうです。勉強を始めたのが今年の1月で、本格的に開発を始めたのが4月ごろだったので、完成まで8か月くらいです。正直、ちゃんと仕様を決めて開発に臨んだわけではなく、割と行き当たりばったりで作ってきましたが、結果的にはなんとか完成までこぎつけることができました(1か月くらいリファクタリングしてた気がする:grimacing:)
##ふーん、どんなアプリ?
簡単に言えば、「多彩なファイルを添付できて**フレンドと**Androidで写真にテキストを合成する
###Androidで写真にテキストを合成する
(注意)
Bitmapに変換して画像を合成すると元の写真が持つExif情報は失われます。
写真の向きなどを表すExifInterface.TAG_ORIENTATIONなど必要な情報は引き継ぐように実装した方がいいかもしれません。##### 1.合成したい元の写真をBitmapに変換して写真と同じ大きさのCanvasに貼り付けます。
以下のsourcePathに元写真のパスが入ってます。“`
val baseBitmap = BitmapFactory.decodeFile(sourcePath)
val width = baseBitmap.width
val height = baseBitmap.height
val newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(baseBitmap)
canvas.drawBitmap(baseBitmap, 0f, 0f, null)
“`Firebase Management APIを使ってFirebaseプロジェクトの登録をする方法
現職で自動的にFirebaseの設定が追加できないかを調査していたところ一部はbeta版ではありますが方法があったのでメモ。
なぜ調べたのか?
普通のアプリであれば、コンソールでぽちぽちやってjsonファイルを取得すれば事足りるのですが新規で作成するアプリの数が多いことからその部分自動化したいねというところからスタートしました。
Firebase Management APIとは?
Firebaseプロジェクトの新規作成だったり、プロジェクトの情報取得や変更ができるAPIです。
https://firebase.google.com/docs/projects/api/reference/rest
利用したAPIの簡単な説明
projects.list
現在登録されているプロジェクトの一覧を取得します。
![スクリーンショット 2021-11-27 12.13.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.21
JavaScript関連のことを調べてみた
-
- 2024.09.21
JAVA関連のことを調べてみた
-
- 2024.09.21
iOS関連のことを調べてみた
-
- 2024.09.21
Rails関連のことを調べてみた
-
- 2024.09.21
Python関連のことを調べてみた
-
- 2024.09.21
Lambda関連のことを調べてみた