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

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

【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

元記事を表示

Android 「No cached version of xxxx available for offline mode.」の解決法

#No cached version of xxxx available for offline mode
![スクリーンショット 2021-07-20 16.19.40.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/9e1b6c9b-cc44-6b72-9317-ab2aaaa8599f.jpeg)

右側の「Gradle」を押すと、Gradle Toolsの設定?みたいなタブが出ます。
そこで②のアイコンを押すと解決しました:sweat_smile:

原因はよくわかりません!!

#参考

https://stackoverflow.com/questions/37409265/no-cached-version-available-for-offline-mode/68418377#68418377

元記事を表示

AndroidのダイアログにEditTextを追加する方法

AndroidのAlertDialogにEditTextを追加する方法を解説します。

まずは最も簡単な例をご紹介します。

“`Sample.kt
val editText = AppCompatEditText(this)
AlertDialog.Builder(this)
.setTitle(“名前の変更”)
.setMessage(“名前を入力してください。”)
.setView(editText)
.setPositiveButton(“OK”) { dialog, _ ->
// OKボタンを押したときの処理
dialog.dismiss()
}
.setNegativeButton(“キャンセル”) { dialog, _ ->
       // キャンセルボタンを押したときの処理

元記事を表示

Android: アプリ外からアクセスできるように画像を保存する (対象範囲別ストレージ対応)

Android 10 以上の対象範囲別ストレージ (Scoped Storage) 環境で、外部のアプリから参照できるように画像ファイルを保存します。

Android 9 以下でも MediaStoreAPI 経由でアクセスすることに変わりはないため、すべての Android で動作するような実装としています。

https://developer.android.com/training/data-storage/use-cases?hl=ja

https://developer.android.com/training/data-storage/shared/media#add-item

## 前提

Android 10 以上ではメディア領域への書き込みに**権限は不要です**。権限の取得なくこの実装が利用できます。

Android 9 以下ではメディア領域への書き込みに WRITE_EXTERNAL_STORAGE 権限が必要です。WRITE_EXTERNAL_STORAGE 権限を取得してから `storeMediaImage()` を実行してください。

## 前提

元記事を表示

IP Webcamを使う

世の中に出回っているIPカメラ(ネットワークカメラ)と呼ばれるものを、もう少し機能は限定的で良いので簡単にブラウザで(OS非依存で)使えるようにならないかと以前から考えていたが、スマホでIP Webcamというアプリを使うのが良さそうと最近知った。

https://play.google.com/store/apps/details?id=com.pas.webcam&hl=ja&gl=US

Androidのスマホにインストールして起動するだけ。
IPカメラだとLANの外からアクセスするためのサーバ設定とかもあって、このアプリの場合はivideonというのを経由すればできるらしいが、自分の使い方だと基本的にLAN内の装置の監視に使うので不要。単純にLAN内で使用する場合は、例えばIPを192.168.0.10と仮定して“`http://192.168.0.10:8080/“`にブラウザでアクセスすれば使える。複数のカメラを同時に表示したい場合は、適当なhtmlファイルを作るのが簡単。

“`html


Android: アプリ外の画像一覧を取得する (対象範囲別ストレージ対応)

Android 10 以上の対象範囲別ストレージ (Scoped Storage) 環境で、メディア領域にある画像一覧を取得します。

アプリ独自の画像選択 UI を実装するときなどは、画像選択 Intent に頼らず、MediaStoreAPI から画像一覧へアクセスする必要があります。

Android 9 以下でも MediaStoreAPI 経由でアクセスすることに変わりはないため、すべての Android で動作するような実装としています。

https://developer.android.com/training/data-storage/use-cases?hl=ja

https://developer.android.com/training/data-storage/shared/media?hl=ja

## 前提

事前に READ_EXTERNAL_STORAGE パーミッションを得ておきます。

ActivityResultContract を使ってパーミッションを要求する方法は以下の記事を参照してください。

https://qiita.com/irg

元記事を表示

Android: ActivityResultContracts.RequestPermission でパーミッションを要求する

ActivityResultContract の仕組みを使って、パーミッションを要求することができます。

https://developer.android.com/training/permissions/requesting?hl=ja#request-permission

## 前提

AndroidX や AndroidX Fragment が導入されている前提です。

## 実装

[RequestPermission](https://developer.android.com/reference/kotlin/androidx/activity/result/contract/ActivityResultContracts.RequestPermission) を使います。

“`kotlin
class MyFragment: Fragment() {
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.Requ

元記事を表示

OTHERカテゴリの最新記事