- 1. Androidのシンプルアーキテクチャ
- 2. ActivityResultContract を使ってアプリ外からアクセスできる写真を撮影する (対象範囲別ストレージ対応)
- 3. 【Android】 TextWatcherを使って、金額入力時にカンマを加える。
- 4. Android: Debug Keystore と Release Keystore をコマンドから生成する
- 5. JenkinsでGitHubからUnityビルドと結果を通知自動化メモ
- 6. Flutterでシンプルな枠付きの吹き出しを使いたかったのでパッケージを作った
- 7. NestedScrollViewの孫要素にandroid:layout_height=”match_parent”が効かずハマった。
- 8. PCでAndroid端末を操作する(画面・音声のミラーリングとPC上での操作)
- 9. Android StudioをIntelliJ公式プラグインで日本語化する
- 10. 【Android / Kotlin】Rx を理解する(ストリーム編)
- 11. Android Studioのログが流れない場合の対応
- 12. Android ビルドは成功するけど「App Name has stopped」となる(Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId)
- 13. 【備忘録】Androidで魔法を使っているみたいなタッチエフェクト
- 14. ActivityResultContract を使って外部のカメラアプリで写真を撮影する (アプリ固有ストレージを使う方法)
- 15. Android(kotlin)プログラミングで画像をDrawableからファイル名で取得したい!
- 16. Custom view XxxView overrides onTouchEvent but not performClick って怒られるケースについて
- 17. Android 「No cached version of xxxx available for offline mode.」の解決法
- 18. AndroidのダイアログにEditTextを追加する方法
- 19. Android: アプリ外からアクセスできるように画像を保存する (対象範囲別ストレージ対応)
- 20. IP Webcamを使う
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にファイル名から画像を指定するに当たり僕のようなググッテコピペマンでも分かるような文献があまりにも少なかったのでこの度記事を書きま
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
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた