- 1. 今年の夏の暑さを測るためにmicro:bitとweather:bitで遊んでみた時に苦労したことをメモする ※問題解決後更新予定
- 2. Pepper SDK入門(29) BaseChatbotReactionでちょっと自発的なPepperに生まれ変わってもらう
- 3. 【Android】Installed Build Tools revision 31.0.0 is corruptedの対処法
- 4. Hiltを自習したときのメモ
- 5. JetpackCompose のAlertDialog で時間を溶かした
- 6. Androidのシンプルアーキテクチャ
- 7. ActivityResultContract を使ってアプリ外からアクセスできる写真を撮影する (対象範囲別ストレージ対応)
- 8. 【Android】 TextWatcherを使って、金額入力時にカンマを加える。
- 9. Android: Debug Keystore と Release Keystore をコマンドから生成する
- 10. JenkinsでGitHubからUnityビルドと結果を通知自動化メモ
- 11. Flutterでシンプルな枠付きの吹き出しを使いたかったのでパッケージを作った
- 12. NestedScrollViewの孫要素にandroid:layout_height=”match_parent”が効かずハマった。
- 13. PCでAndroid端末を操作する(画面・音声のミラーリングとPC上での操作)
- 14. Android StudioをIntelliJ公式プラグインで日本語化する
- 15. 【Android / Kotlin】Rx を理解する(ストリーム編)
- 16. Android Studioのログが流れない場合の対応
- 17. Android ビルドは成功するけど「App Name has stopped」となる(Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId)
- 18. 【備忘録】Androidで魔法を使っているみたいなタッチエフェクト
- 19. ActivityResultContract を使って外部のカメラアプリで写真を撮影する (アプリ固有ストレージを使う方法)
- 20. Android(kotlin)プログラミングで画像をDrawableからファイル名で取得したい!
今年の夏の暑さを測るためにmicro:bitとweather:bitで遊んでみた時に苦労したことをメモする ※問題解決後更新予定
# 初めに
去年micro:bitとweather:bit(スイッチサイエンスに終売のお知らせがあったのが残念)でとりあえず温度測れるようにしたんですけど、単体での計測だったのでBLEのお勉強も兼て温度を定期的に送信することを目的に遊んでみました。
micro:bitとweather:bitは大して苦労はしなかったのですが、AndroidでBLEを扱うプログラムをちゃんと組んだのが初めてで知らないことだらけで苦労したので、その辺を載せておこうと思います。# micro:bitとAndroidの通信
UARTを使って通信します。
基本的に、micro:bitからAndroidへの通信です。
なので、TX Characteristicを利用します。
この時に、BluetoothGatt#setCharacteristicNotification()メソッドで、Notifyを有効にします。
そのあとに、Descriptorに値を設定するのですが、割とNotify関連を調べると、BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUEを設定する記事
Pepper SDK入門(29) BaseChatbotReactionでちょっと自発的なPepperに生まれ変わってもらう
#まずはBaseChatbotReactionがどこの馬の骨かを知る?
BaseChatbotReactionとは、ChatbotReactionの親クラスです。[前回のサンプルアプリ](https://qiita.com/kskrin/items/1b2baa8a087e6fd39eb4#%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%82%92%E5%9B%9E%E5%8F%8E%E3%81%99%E3%82%8B)に登場しましたね!
Chatbotが実行された場合のリアクションを実装するには、このBaseChatbotReactionを継承しなくてはならないのです。
✨$\huge{✨✨}$⭐️⭐️$\huge{✨}$⭐️⭐️$\huge{✨}$
【Android】Installed Build Tools revision 31.0.0 is corruptedの対処法
# 環境
– Android Studio 4.2.2# エラー内容
新規プロジェクトを作成した時,あるいは`Run ‘app’`をした時に,以下のエラーが発生する場合があります.“`
Installed Build Tools revision 31.0.0 is corrupted.
Remove and install again using the SDK Manager.
“`# 対処法
以下のように`app/build.gradle`を書き換えることでエラーを解決できます.`変更前`
“`app/build.gradle
android {
compileSdkVersion 31
buildToolsVersion “31.0.0”defaultConfig {
applicationId “app.myouji.nickname.myapplication”
minSdkVersion 21
targetSdkVersion 31
versionCode
Hiltを自習したときのメモ
プロジェクトでの Hiltの採用にあたり、 Daggerで全く理解できてなかった DIについて自習したときのメモ。
間違いがあったら指摘してください。
## Dependency Injectionを使う動機について
“` kotlin
class Car {
val engine = Engine()
}
“`みたいに書くと、 正常系はいざしらず、Engineの挙動に色々障害を起こさせてテストするのにいちいちコードを修正しなきゃいけなくって、それを書き戻すことを忘れたら悲惨なことになるよね、という
“` kotlin
class Car {
// val engine = Engine()
val engine = EngineWithTrouble() // 特定の条件で失敗するEngineのテスト。テストが終わったらもとに戻すこと
}
“`テスト目的以外でも、Engineが抽象クラスで、普通のエンジン、水素エンジンを使い分けたいってこともあるかもしれない。これも Carのコードを修正することになる。
“` kotlin
class Car
JetpackCompose のAlertDialog で時間を溶かした
JetpackCompose でAlertDialog を使うときに失敗した話です
# まとめると
– AlertDialog を使うときはText のみで単純な構成にするのが無難
– TextField を置きたいときはDialog を使おう
– そもそもダイアログが必要か考えよう# どんな失敗?
テキスト入力をするダイアログを`AlertDialog`を使って作ると、レイアウトが崩れてしまうことがありました“`kotlin
@Composable
fun MyDialog4(onDismiss: () -> Unit) {
val (text, setText) = remember { mutableStateOf(“”) }
AlertDialog(
onDismissReq
Androidのシンプルアーキテクチャ
この記事では、Androidアプリのアーキテクチャについて、改めて纏めています。
### ポイント
Androidに関わらず、オブジェクト思考ではよく言われる、下記を守ることです。– クラスをシンプルに
– 依存を少なく### 技術要素
ここでは、下記の技術要素を使用しています。– Androidの推奨アーキテクチャ
https://developer.android.com/jetpack/guide?hl=ja#recommended-app-arch
– データバインディング
https://developer.android.com/topic/libraries/data-binding?hl=ja
– AndroidでのDI
https://developer.android.com/training/dependency-injection?hl=ja
– DataStore
https://developer.android.com/topic/libraries/architecture/datastore?hl=ja### 実装テー
ActivityResultContract を使ってアプリ外からアクセスできる写真を撮影する (対象範囲別ストレージ対応)
ActivityResultContract を使って、外部のカメラアプリを起動して写真を撮影します。
Android 10 以上の対象範囲別ストレージ (Scoped Storage) 環境で、他のアプリからアクセスできるようにメディア領域へ写真を保存します。
Android 9 以下でも権限や MediaStoreAPI の処理が少しだけ異なる以外はほとんど同じ実装となります。
カメラアプリを起動して撮影した写真は、なるべく外部のアプリからもアクセスできることが求められます。ライフログ系のコンテンツやブログ記事の添付ファイルなどコンテンツ性のある写真であれば、ファイルをアップロードするだけでなく、ユーザーの端末のメディア領域へ保存し、アプリがアンインストールされても写真が消えないようにすることが求められます。
https://developer.android.com/training/camera/photobasics#TaskPath
撮影した写真をアプリ内だけで利用し、他のアプリからアクセスできないように扱いたい場合は、以下の記事を参照してください。
https
【Android】 TextWatcherを使って、金額入力時にカンマを加える。
## 今回の目的
EditTextで金額を入力する時、月並みだが、動的に入力した数値をカンマ区切りに変換できないか、
色々調べたところ、ある程度制御が出来るようになったので、紹介していこうと思います。## 使用する環境
– AndroidStudio Ver 3.4.1
– Android 10.0 (Q) API 29## TextWatcher
[TextWatcher (AndroidDeveloper)](https://developer.android.com/reference/android/text/TextWatcher)
⇨ EditTextの入力を監視するEventListener(編集前の値を取得したり、編集後の値やポジションを取得する等、出来る)
色々詳しいことは、参考サイトや↑のリファレンスを参照してください。
## 実装に当たって
まずはImplements(実装)していきます。
“`MainActivity.java
public class SampleClass1 extends AppCompatActivity impl
Android: Debug Keystore と Release Keystore をコマンドから生成する
デバッグ用署名とリリース用署名を生成するコマンドまとめ。
## keytool バージョン
keytool は JDK のバージョンに依存します。
この記事では AdoptOpenJDK 16.0.1 で確認しています。JDK 16 keytool では storetype はデフォルトで PKCS12 のようですが、JDK 8 などでは storetype jks がデフォルトになっている可能性があるので `-storetype pkcs12` オプションを追加してください。
## Debug 署名
debug.keystore を生成します。
“`shell
% keytool -genkey -v -keystore debug.keystore -keyalg RSA -validity 10950 -storepass android -alias androiddebugkey -dname “CN=Android Debug, O=Android, C=US”
“`| 項目 | 値 |
| — | — |
| Algorithm | 2048
JenkinsでGitHubからUnityビルドと結果を通知自動化メモ
ビルド用スクリプト作成
—
**ApplicationBuilder**スクリプト作成し**Editorフォルダー**のしたに置く**注:**個人の場合、仕様の必要で、プロジェクトが**確認用バージョン**と、**本番用バージョン**に分けてるため、バンドルIDを指定しています。
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Build.Reporting;
using UnityEngine;public class ApplicationBuilder
{
//ipa出力先
private static string locationPathName;
//バンドルID
private static string bundleIdentifier;
Flutterでシンプルな枠付きの吹き出しを使いたかったのでパッケージを作った
# 経緯
業務で**枠付きの吹き出し**を使いたかったが、いい感じのパッケージがなかったので(パクって)作った
パッケージを使っていたんですがIssueなどに作成者が反応していないので、勝手にパクってパッケージ化しました。# さっさと使い方人向け
https://pub.dev/packages/speech_balloonここでパッケージを公開しています。バグやリクエストはIssueまでおねがいします。
こんな感じで使えます
![example1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256196/0274a690-5a47-261a-f1a4-e634ed6bdff9.png)# 簡単な使い方
### 画像の左上の吹き出しの場合
“`dart
SpeechBalloon(
nipLocation: NipLocation.bottom, // 向きを設定デフォルトは下です
color: Colors.white, // 中身の色これはデフォルトで白になっています
NestedScrollViewの孫要素にandroid:layout_height=”match_parent”が効かずハマった。
NestedScrollViewの孫要素にレイアウトの残りを全て埋めてもらおうとしたら、思いの外ハマってしまったので備忘録として。
##経緯
・NestedScrollViewで要素を囲んでいる既存のViewに、CustomViewを追加し、残っていた隙間を埋めたかった。##スタートとゴール
(あくまでイメージなので適当なViewで構成しています。)こんな感じのViewがあって
![スタート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773816/da7f4c3f-1082-379c-ae3e-fbb6e5cea972.png)こんなソース。
“`sample.xml
PCでAndroid端末を操作する(画面・音声のミラーリングとPC上での操作)
ドハマリしたのでメモ。
## 要件
– Windows10上にAndroid端末の画面を出力(ミラーリング)
– Windows10上にAndroid端末の音声を出力(ミラーリング)
– Windows10上でAndroid端末の画面を操作
– Android端末の対象はFire HD 8 Plus (多分Android9)## 試した手法
| 名称 | 確認事項 |
|:———–|:————|
| [Vysor](https://www.vysor.io/)|
- 無料版だと画質や音声の制限あり
- 有料版なら全てうまくいきそう
|
| [ApowerMirror
スマホをリアルタイムに
ミラーリング/制御する](https://www.apowersoft.jp/phone-mirror)|
- ミラーリング実行時の操作が煩雑
- 無料版だとミラーリング画面にロゴ表示
- 無料版だとAndroidアプリ側の広告表示がエグい
- 有料版なら全てうま
Android StudioをIntelliJ公式プラグインで日本語化する
先ほどAndroid StudioのベースとなっているIntelliJ公式から日本語化プラグインのリリースが発表されました!
IntelliJ IDEA、AppCode、CLion、DataGrip、GoLand、PyCharm、PhpStorm、RubyMine、および WebStorm の UI が完全に日本語にローカライズされました!
日本語言語パック??の公式リリースを記念して、対応する IDE が 30% オフ!
詳細:https://t.co/i22VHk1XUV pic.twitter.com/HAlctKKSj6
— JetBrains Japan (@jetbrainsjp) July 22, 2021
Android Studioもこれで日本語化できるのでは?と思い試してみました。
# 環境
– Android Studio 4.2.2# プラグインのダウンロード
Android Studioのプラグイン画面から検索してみましたがヒットしなかったのでWebページからダウンロードします。https://plugins.jetbrains.com/plugin/13964-japanese-language-pack——/versions
ページのVersionsから対応するバージョンを探します。Android Studio4.2.2のベースとなっているIntelliJ IDEAのバージョンは**2020.2**です。なので、このバージョンが出るまでひたすら過去に遡り続けます。
![Screen Shot 2021-07-
【Android / Kotlin】Rx を理解する(ストリーム編)
# はじめに
今回は今までプロジェクトでなんとなくで読んで使っていたRxを学び直しつつ、理解する。
読んでいただければ、Rx入門者の方でもプロジェクトのコードをある程度読めるレベルになるのではないか、と勝手に思っています。誤った言い回し、解釈、記述などあればコメントいただければ幸いです。
# Rx の概要(主な機能)
Rxの主な機能としてはざっくり以下だと認識している。1. 「値を流して処理する」(ストリーム)
2. 「値の監視 / イベントを検知して処理する」(イベントバス的な)
3. 「スレッド操作(切り替え・使い分け)」今回は
>1. 「値を流して処理する」(ストリーム)のイメージを掴んで、知識を整理しながら理解したいと思う。
#### 参考リンク
– https://qiita.com/disc99/items/1b2e44a1105008ec3ac9#merge
– https://ichi.pro/android-de-rxjava-o-shiyosuru-riyu-139590064902698
– https://tech.ga-tech.co.j
Android Studioのログが流れない場合の対応
Android StudioにてAndroidアプリの開発をしている際に、アプリ起動後のLogCatのログが流れない場合があります。流れない原因については改めて調査しようと思いますが、今回はログを流れるようにする方法をお伝えします。
# ログが止まった場合の対応
* Android StudioにてTerminalのタブを開く
* ターミナルにて以下のコマンドを実行~~~
$ adb kill-server
$ adb kill-server
daemon not running; starting now at tcp:5037
daemon started successfully
~~~* 上記のような表示が出れば成功
Android ビルドは成功するけど「App Name has stopped」となる(Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId)
#環境と概要
Ionic + Capacitorのクロスプラットフォームアプリ下記ドキュメントの通りCapacitor 3にアップデートしたら、大惨事に見舞われた。。。。
https://capacitorjs.com/docs/updating/3-0
![Screenshot_1626789186.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/66d0a31a-78ff-115d-8803-2db656603d73.png)
ビルドは成功するのだが、、、**エミュレーターでアプリを起動すると、起動した瞬間に落ちるのだ!!**
なぜだーーー。Android Studioでのエラーログはこんな感じ?
“`console
15690-15775/com.sample.app E/Capacitor: Serious error executing plugin
java.lang.reflect.InvocationTargetException
a
【備忘録】Androidで魔法を使っているみたいなタッチエフェクト
##画面に触るたびに散る光の粉っぽいエフェクト
例
![screencast-Genymotion-2021-07-21_17.25.14.665.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391023/d66fba1d-6670-bf46-dd44-8a596ac4be81.gif)こんな感じのエフェクト。
“`MyEffect.kt
@SuppressLint(“ViewConstructor”)
class MyEffect(context: Context, private val eventX: Float, private val eventY: Float): View(context) {
private var paint = Paint()override fun onDraw(canvas: Canvas?) {
canvas?.drawColor(Color.TRANSPARENT)
val color = Col
ActivityResultContract を使って外部のカメラアプリで写真を撮影する (アプリ固有ストレージを使う方法)
ActivityResultContract を使って、外部のカメラアプリを起動し、写真を撮影して画像ファイルを取得します。
この記事の実装では撮影した画像ファイルはアプリ固有ストレージに保存し、他のアプリからはアクセスできないファイルとなります。
https://developer.android.com/training/camera/photobasics#TaskPath
ライフログ系のコンテンツやブログ記事の添付ファイルなど、多くの場合では撮影した写真がコンテンツとしての価値がある場合はなるべく対象範囲別ストレージ (Scoped Storage) のメディア領域へ保存し、アプリをアンインストールしても写真が消えないようにすべきです。
撮影した写真が一時的に使われるだけで、アプリのアンインストールで写真が消えてしまってもユーザーが困らないものである場合はこの記事の方法でアプリ固有ストレージへ保存します。撮影した写真を外部アプリと共有しなくて良いケースは稀なので、慎重に検討してください。
https://developer.android.com/training/d
Android(kotlin)プログラミングで画像をDrawableからファイル名で取得したい!
#したいこと
(RecyclerViewのAdapterで)imageViewにdrawableフォルダに入れている「sample.png」を入れて表示したい
#コード
“`kotlin
// ここは説明がめんどくさいから適当ににインスタンス化してるだけなので
// 適宜findViewById()等でインスタンスを取得しておきましょう
val imageView = ImageView()// ここからがカギ!
// contextに関しても適宜その時のcontextにしましょう
// 引数に関しては「sample」のところだけ変更すれば他は変更する必要はありません
// ファイル名に拡張子は必要ありません
imageView.setImageResource(context.resources.getIdentifier(“sample”,”drawable”,context.packageName))
“`#感想
ImageViewにファイル名から画像を指定するに当たり僕のようなググッテコピペマンでも分かるような文献があまりにも少なかったのでこの度記事を書きま