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

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

【Android】UI テストの基本と処理の待ち合わせ方法

## やりたいこと

以下のようなアプリに対して Espresso を使った UI テストを作成します。
(リポジトリは[こちら](https://github.com/yudai0308/ui_test_sample))

– ユーザー名を入力してログインできる
– ユーザー名が入力されていないと注意メッセージが表示される
– ログインには3秒かかる
– ログイン後、メッセージが表示される

| 初期画面 | ユーザー名なしでクリック |
| :-:| :-: |
| ![device-2021-08-01-173949.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238891/bfc19835-0bac-397f-0f44-aef715ddcb32.png) | ![device-2021-08-01-174008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238891/c681db21-fbfd-f0

元記事を表示

Android Studioを日本語化する(トラブルシューティング付き)

# はじめに

Android Studioを日本語化する手順をトラブル・解決方法と合わせて記載します。

# 環境

* macOS 11.4
* Android Studio Arctic Fox | 2020.3.1

# 日本語化手順

## Android Studioをインストールする。

↓からダウンロードしてインストールします。

https://developer.android.com/studio?hl=ja

## 日本語化プラグインをインストールする。

### 【トラブル】日本語化プラグインが見つからない。

Android Studioで日本語化プラグインを検索しても出てきません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342629/a4cfa828-23f5-8d54-27e5-dc93cb9e6c14.png)

### 【解決方法】JET BRAINS Marketpalceからダウンロードしてインストールする。

下記リンクから「Japan

元記事を表示

Accompanist のユースケース

Jetpack Compose を使うプロジェクトでは使うことになるであろう Accompanist とは何なのか、Accompanist は何ができるのかを書いていこうと思います。(v0.15.0 時点)

## Accompanist とは?

Accompanist は、Jetpack Compose で一部の API を使いやすくしたり、Android View にある機能を Compose でも使えるようにしたライブラリのグループです。

Accompanist は複数あるライブラリのグループで、v0.15.0 時点で以下のライブラリがあります。

| Library | package |
|—-|—-|
|Inset|com.google.accompanist:accompanist-insets:<version>
com.google.accompanist:accompanist-insets-ui:<version>|
|System UI Controller|com.google.accompanist:acco

元記事を表示

View.onSaveInstanceState()を簡単に実装する方法

# 概要
Android の [onSaveInstanceState()](https://developer.android.com/reference/kotlin/android/view/View#onSaveInstanceState()) 及び [onRestoreInstanceState(Parcelable)]() を簡単に実装する方法のメモです。

例えば、foo, bar, hoge, fuga という4つのプロパティを保存したいなら以下のような感じになります。

“`kotlin
override fun onSaveInstanceState(): Parcelable = onSaveInstanceState(target)
override fun onRestoreInstanceState(state: Parcelable) = onRestoreInstanceState(state, target)

private val target = listOf(::foo, ::bar, ::hoge, ::fuga)
“`

# 方式
[o

元記事を表示

BoxFitでcoverやfitWidthを指定しているのに両サイドにスペースができる場合の対処法

# 結論
widthを設定しましょう

“`dart
Column(children: [
Expanded(
child: SizedBox(
child: Image.network(
‘path’,
fit: BoxFit.cover,
),
),
),
Expanded(
child: SizedBox(
width: MediaQuery.of(context).size.width, // この一行を追加
child: Image.network(
‘path’,
fit: BoxFit.cover,
),
),
),
]);

“`
おめでとうございます。

元記事を表示

ノーコード開発で Acty-G3 から SORACOM Unified Endpoint へ通信してみる

# はじめに

[IoT デバイス特価キャンペーン](https://discovery.soracom.jp/2021-special-price-campaign/) で特別価格になっていた Acty-G3 を~~手が滑って~~購入してとりあえず気軽に使ってみたい、ということで MIT App Inventor で Acty-G3 のアプリを開発し、SORACOM Unified Endpoint へつなげてみる。

# MIT App Inventor 実装

以下のサイトを参考に、 Unified Endpoint へ POST リクエストする処理をブロックで実装

[Using Web APIs with JSON](http://ai2.appinventor.mit.edu/reference/other/json-web-apis.html)
[Unified Endpoint を利用して Funnel と Harvest にデータを送信する](https://users.soracom.io/ja-jp/docs/unified-endpoint/funnel-and

元記事を表示

スマートフォンアプリにおけるファイルの保存先

react nativeのアプリを書く時に、各OSごとに保存先の方針の違いに混乱したため、備忘録としてまとめました。

# iOSの場合
|判断基準 |具体例 |保存場所 |
|—|—|—|
|ユーザが作成した(一時的ではない)データ
アプリが再作成できないデータ
**ユーザに公開していいもの** |ユーザデータ
ダウンロードした画像 | Application_Home/Document |
|再ダウンロードできるデータ
再作成できるデータ
バックアップを取らなくていいもの |データのキャッシュファイル
ドキュメントデータ |Application_Home/Library/Caches |
|一時的にのみ使用されるデータ
勝手に消されても問題がないもの |起動ごとに変わる一時的なデータ |Application_Home/tmp|

– 一番上の項目だけが、iCloudバックアップ対象
– また、/tmpディレクトリのものはアプリが実行されていない時に、システムに勝手に削除される可能性があるので扱いに注意すること

元記事を表示

Android: Android 10 からの対象範囲別ストレージ (Scoped Storage) とメディアファイルアクセスのまとめ

Android 10 から、対象範囲別ストレージ (Scoped Storage) が導入され、アプリ固有のストレージと、アプリ外部のストレージが厳密に区別され扱われるようになりました。

アプリ外部の画像を選択したり、外部のアプリと共有可能なメディア領域へ画像を保存したりする場合には対象範囲別ストレージを正しく扱う必要があります。

Andorid 11 以上の環境では、Android 11 対応 (targetSdkVersion = 30) でアプリをビルドすると対象範囲別ストレージが強制的に有効となります。`requestLegacyExternalStorage` 設定も無視されるようになります。対象範囲別ストレージに正しく対応しましょう。

https://developer.android.com/about/versions/11/privacy/storage?hl=ja#scoped-storage

この記事では Android 10 以上の対象範囲別ストレージ環境を前提としています。Android 9 以下の違いを考慮する必要がある箇所では都度補足しています。

元記事を表示

Could not find tools.jar. Please check that /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home contains a valid JDK installation.

しばらく開発していなかったAndroidアプリが以下のエラーでビルドできなくなってしまいました。

“`
Could not find tools.jar. Please check that /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home contains a valid JDK installation.
“`

[Stackoverflow](https://stackoverflow.com/questions/64968851/could-not-find-tools-jar-please-check-that-library-internet-plug-ins-javaapple) によると Big sur に更新後に発生する様子。

ちなみに私の環境は2番目の回答のような2つのJava環境がある(?はっきりわかってない)状態でした。

“`
$ /usr/libexec/java_home -V | grep jdk
Matching Java Virtual Machines (2)

元記事を表示

Android: ActivityResultContract を使って画像選択アプリで画像を選択する

ActivityResultContract を使って、外部の画像選択アプリを起動し、ユーザーに画像を選択させます。

https://developer.android.com/training/basics/intents/result?hl=ja

Android 標準の画像選択アプリではなく Google Photos アプリを起動して画像選択させたい場合は以下の記事を参照してください。

https://qiita.com/irgaly/items/a1967f0fa4b505ab83e8

## 必要な権限

外部の画像選択アプリによって画像を選択し、その画像を読み取るためには **READ_EXTERNAL_STORAGE 権限は不要** です。

画像選択アプリが端末に保存されている画像を読み取る権限を取得しており、ユーザーが選択した画像は Intent 発行元のアプリが読み取れるパスとして返却されるためです。

## 前提

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

## 実装

“`kotlin
class MyFra

元記事を表示

Android: ActivityResultContract を使って Google Photos アプリで画像を選択する

ActivityResultContract を使って、Google Photos アプリを起動し、ユーザーに画像を選択させます。

ActivityResultContracts.GetContent を使って、Android 標準の画像選択アプリから画像選択をする実装は以下の記事を参照してください。Android 標準の画像選択アプリであれば Google Drive や Google Photos や Dropbox など多くのストレージサービスとの連携が可能であるため、Google Photos アプリ起動 Intent よりも Android 標準の画像選択を利用することをお勧めします。

https://qiita.com/irgaly/items/b9bbef4de73669113ddf

## 必要な権限

外部の画像選択アプリによって画像を選択し、その画像を読み取るためには **READ_EXTERNAL_STORAGE 権限は不要** です。

画像選択アプリが端末に保存されている画像を読み取る権限を取得しており、ユーザーが選択した画像は Intent 発行元のアプ

元記事を表示

【Android】URLからファイルをダウンロードして表示

#はじめに

URLからpdfなどのファイルをダウンロードして、ダウンロード完了後に表示する方法について記載。
以下の2つの方法を紹介。
・コルーチンを使用した方法
・DownloadManagerを使用した方法

# コルーチンを使用した方法
まず、ダウンロード用のメソッドを作成。事前にFileProviderを使うように設定する必要あり。

“`Kotlin
fun download() {
try {
// linkにファイルが置かれたURLを指定
val link = “https://example.com/example.pdf”
//getExternalStoragePublicDirectoryはAndroid Qで非推奨になっているため、適宜変更。
val dir = Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS).absolutePath
val path = dir + link.substring(link.lastIndexOf(“/”))

/

元記事を表示

Android: 複数の ActivityResultContract を IntentChooser でまとめて、カメラアプリでの撮影かメディア選択のどちらにも対応する (Google Photos アプリ選択にも対応)

ActivityResultContract を使って、Android 標準の画像選択アプリと Google Photos アプリ画像選択とカメラアプリ起動の IntentChooser を表示し、ユーザーがいずれかを選べるようにします。Google Photos アプリやカメラアプリが存在しない端末であれば、それぞれの選択肢は非表示となります。Google Photos アプリもカメラアプリも存在しない場合は、Intent Chooser は表示されず、Android 標準の画像選択アプリが起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17931/f4cbe51f-f967-03f0-7d91-89363dce0dd6.png)

ActivityResultContract の仕組みは便利ですが、複数の ActivityResultContract をまとめる仕組みはありません。複数の ActivityResultContract をうまくマージするような Image

元記事を表示

Android12対応でexported属性を設定したのに怒られた時の対処法

Android12から、セキュリティ面の改善を目的として、インテントフィルタを使用するアクティビティやサービスなどのコンポーネントで`android:exported`属性を明示的に宣言する必要があります。

https://developer.android.com/about/versions/12/behavior-changes-12?hl=ja#exported

しかし私の手元では、インテントフィルタを使用する全てのコンポーネントで`android:exported`属性を宣言したにも関わらず**「exported属性を指定してくれ」とエラーになってコンパイルできない事象**がありました。

そこでこの記事ではどのようにしてその事象を解決したかを紹介します。

### 結論

自分で用意したManifestではexported属性をちゃんと宣言してても、依存ライブラリでのManifestで条件を満たしていない場合、最終的にmergeされたManifest内で条件を満たさないことになるため、コンパイルエラーになります。

条件を満たしていないAndroidManifestを

元記事を表示

Android Studio と IBM Security Verify SDKをはじめて触ってみる③

# はじめに
前回記事では、GitHubに公開されているサンプルアプリケーションを利用する際に、Pythonのコードを利用してTOTPを生成しました。
[Android Studio と IBM Security Verify SDKをはじめて触ってみる②](https://qiita.com/fitz/items/baadc466055e9dbd00ef)

今回は、IBM Security VerifyのSDKを使って、TOTPを生成してみたいと思います。

# 1.QR Code Scan Demoアプリをカスタマイズする

QR Code Scan DemoアプリのMainActivity.javaには、Android StudioのLogcatにHOTPのコードを生成するサンプルが記載されています。
このサンプルを活用して、Totpを生成していきます。

“`MainActivity.java
import com.ibm.security.verifysdk.HotpGeneratorContext;
~割愛~
protected void onCreate(Bundle

元記事を表示

Android Studio と IBM Security Verify SDKをはじめて触ってみる②

# はじめに
前回記事では、GitHubに公開されているサンプルアプリケーションがAndroidデバイスで起動するところまで確認できました。
[Android Studio と IBM Security Verify SDKをはじめて触ってみる①](https://qiita.com/fitz/items/b9b19fba10f769e491a4)

今回は、QR Code Scan Demoアプリ/Authenticator Demoアプリでなにができるか動作確認を行っていきます。

動作確認した環境は、Windows10+Android Studio 4.2.1 +Android10デバイス(Xperia XZ2)となります。

# 1.Authenticator Demoアプリを試す

**7/29 更新:このAuthenticator DemoアプリはTOTPを想定した作りになっていました。記事のように、IBM Security Verify アプリとして登録すると、登録処理はできますが、多要素認証として利用できる状態まではなりませんでした。IBM Security Verif

元記事を表示

Android Studio と IBM Security Verify SDKをはじめて触ってみる①

# はじめに
IBM Security Verify には、iOS/Android向けのSDKが提供されています。
AndroidStudioを初めてインストールし、試行錯誤しながら、GitHubに公開されているサンプルアプリケーションでなにができるのか確認しました。

動作確認した環境は、Windows10環境+Android10デバイス(Xperia XZ2)となります。
対象は以下の2つのアプリにしました。

– 1.QR Code Scan Demoアプリ
– 2.Authenticator Demoアプリ

||1.QR Code Scan Demoアプリ |2.Authenticator Demoアプリ|
|—|—|—|
|アプリ概要|QRCodeを読み取るサンプルアプリケーション|IBMVerifyアプリを登録するサンプルアプリケーション|
|アプリ起動画面| ![androidStudio (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/f8f9d35

元記事を表示

CheckedTextViewを知り、ListViewを知る

CheckedTextViewをご存知でしょうか。
私は先日、Android Studioの予測機能で存在を知りました。
ということで、この機会にCheckedTextViewを使えるようになりたいと思います。

実行環境
Android Studio:4.2.2
Kotlin:1.3.72

##CheckedTextViewとは
TextViewのサブクラスに位置する、チェック判定機能がついたTextViewのことです。
ListViewと共に使われるもので、ListViewの設定において`setChoiceMode`が`CHOICE_MODE_NONE`でない場合、つまりListViewの各項目が選択可能な場合に使用することができます。
ちなみにですが、ListViewを実装せずに個別で使うこともできました。
特段思いつく用途はありませんが、何かの際に役立つかも知れませんので覚えておこうと思います。

また、CheckedTextViewではチェック判定を可視化するために`setCheckMarkDrawable`という機能を用います。
よく見かけるCheckBoxクラスでは左

元記事を表示

【Jetpack Compose】Githubリポジトリを一覧表示するサンプルアプリ作った

## About
もうすぐRelease版が出るJetpack Composeでサンプルアプリを作ったので、色々知見を書いていこうと思います!
本当はちゃんと整理された記事を書こうと思ったのですが、色々浅く広く書きたかったので思い出したままに見出し付けて書いていきます。目次を参照して興味のあるところだけ見ていただいても良いかもしれないです?

https://github.com/yasukotelin/jetpack-compose-sample

画面としては超シンプルな感じです。

– 自分のGithubリポジトリを一覧表示する
– リポジトリの詳細画面をWebViewで表示する

UIはこんな感じ。

![adbeem-20210721104634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166629/023d960a-526e-5775-3dc2-6459807d9f31.png) ![adbeem-20210721104645.png](https://qiita-image-stor

元記事を表示

今年の夏の暑さを測るために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を設定する記事

元記事を表示

OTHERカテゴリの最新記事