Android関連のことを調べてみた2021年07月26日

Android関連のことを調べてみた2021年07月26日
目次

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{✨}$lampのコピー.png

元記事を表示

【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公式から日本語化プラグインのリリースが発表されました!

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にファイル名から画像を指定するに当たり僕のようなググッテコピペマンでも分かるような文献があまりにも少なかったのでこの度記事を書きま

元記事を表示

Custom view XxxView overrides onTouchEvent but not performClick って怒られるケースについて

# 概要

custom view を作成した際に、[onTouchEvent()](https://developer.android.com/reference/android/view/View#onTouchEvent(android.view.MotionEvent)) をオーバーライドしたが [performClick()](https://developer.android.com/reference/android/view/View#performClick())
をオーバーライドしていない場合に、以下のような警告が表示されます。[^1]

“`
Custom view XxxView overrides onTouchEvent but not performClick
“`

# performClick() について
まずは [performClick()](https://developer.android.com/reference/android/view/View#performClick()) から読み解いてみようと思います。

## ◆ jav

元記事を表示

OTHERカテゴリの最新記事