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

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

Android開発でのMockitoを使ったUnit Testの書き方

この記事では、Android開発のUnit Testで非常によく使われるモックライブラリ、**Mockito** (Mokito-Kotlin)の導入方法と簡単な使い方を解説します

# Mockito
MockitoはJavaのモックライブラリとして現在デファクトスタンダードなライブラリです。
シンプルかつ高機能で、容易に**テストダブル**を作成することができます。

# テストダブル
テストダブルとは、テスト対象が依存しているコンポーネントを置き換える代用品のことです。
(ダブルとはスタントダブル( = スタントマン)のこと)
テストダブルには、スタブ、モック、スパイ、フェイク、ダミーの5つの役割が定義されており、特に**スタブ**、**モック**、**スパイ**の3つはよく使われます。

|テストダブル|説明|
|:–|:–|
|スタブ(Test Stub)|事前定義した任意の値をテスト対象に与える。|
|モック(Mock Object)|テスト対象メソッド実行時に、テスト対象が依存コンポーネントに与える値や挙動(出力)を検証するために使われる。|
|スパイ(Test S

元記事を表示

【Android】【初心者向け】RoomのAutoIncrement(PrimaryKeyのautogenerate = true)の値は、0で良い

# 【Android】【初心者向け】 RoomのAutoIncrement(PrimaryKeyのautogenerate = true)の値は、0で良い
## 概要
タイトル通りですが、AndroidのRoomのAutoincrement(PrimaryKeyのautogenerate = true)の値は、0で良いという話です。

今まで、業務でRoomを使う経験がなく、 ドキュメントやサンプルコードを見ていて、
AutoIncrementのときに、何を渡せば良いのかわからず、どこかで見たサンプルと同じように`0`を渡しすようにしていました。
ただふとこれで正しいのかと気になり、調べてみて良かったということに気づいたという話です。

## 参考にしたもの
developers: [Primarykey](https://developer.android.com/reference/androidx/room/PrimaryKey.html)

以下は、引用です。

“`
autoGenerate

public boolean autoGenerate ()
Set to tr

元記事を表示

[Android/Kotlin] Android Studioで JSON Kotlin Class 簡単に作ってみた。

JSONデータをKotlin classに変更するため
json to kotlin classというプラグインをインストールする。

https://plugins.jetbrains.com/plugin/9960-json-to-kotlin-class-jsontokotlinclass-

Android Studioのpluginsで
json to kotlin class を打つと下記のようにプラグインが出ます。

![スクリーンショット 2021-02-28 17.13.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/880377/3ae1e8de-2092-59b5-f32b-3eff88a9c9fa.png)

インストールるしてIDEを再実行する。

![スクリーンショット 2021-02-28 17.19.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/880377/35105

元記事を表示

Androidでカスタムスキーマを設定する

##intent-filterの追加
AndroidManifest.xmlにintent-filterを追加します

“`xml







元記事を表示

Android StudioでエミュレータをIDE内に表示する

# 概要
Android 4.1 より、Android Studio の IDE 内にエミュレータを表示できるようになりました。
IDEの上にエミュレーターが重なって手動で移動させたり、アクティブにしたりなどの手間もなくなるので、ディスプレイのサイズが広い場合は、こちらが使いやすいかもしれません。

また、デフォルトでは無効となっているので、設定を調整する必要があります。

![スクリーンショット 2021-02-28 14.00.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142886/4a78e66b-2f0c-5f6e-2a22-beaaf1a58664.png)

# 必要環境
– Android Studio 4.1 以降
– Android Emulator の バージョン 30.0.10 以降

# やり方
以下OS毎のメニュー箇所を参照に **[Launch in a tool window]** にチェックを入れてください。
次回エミュレーター起動時からIDE内に表示されるよう

元記事を表示

Jetpack Compose の依存関係を alpha → beta にあげた時の setContent の Deprecated を解消する

## はじめに
最近 Jetpack Compose が beta 版になったということで早速 Hello World してみたのですが、 元々 alpha 版で作っていたプロジェクトを beta 版にした途端、 `setContent` が参照できなくなってしまったのでその備忘録です。

## 結論
結論から書いてしまいます。
以下を追加すると `setContent` が参照できるようになります。

“`build.gradle
implementation ‘androidx.activity:activity-compose:1.3.0-alpha03’
“`

`androidx.compose.ui.platform.setContent` から `androidx.activity.compose.setContent` に変更されていたために参照できなかったようです。

## 最後に
Android Developers は日本語にすると情報が古かったりするので、English でまずは読む癖をつけたいですねぇ。。

## 参考
[Announcing Jetpac

元記事を表示

SharedPreferencesを自前で難読化するのはもう古い?これからはEncryptedSharedPrefenrecesを使おう

## EncryptedSharedPreferencesとは

Android Developersのサイトにある通り、「SharedPreferencesのKeyとValueを暗号化する実装」を提供するものです。

([Android Developers](https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences)公式サイトより引用)
>An implementation of SharedPreferences that encrypts keys and values.

今までのgetSharedPreferences()などで使用していたAPIの使い勝手はそのままに、暗号化する機能を提供してくれるので、手軽にセキュリティを高めることができます。

## 動作条件
・プロジェクトのminSdkVersionが23以上であること

これはandroidx.securityのライブラリのminSdkVersionが「23」に指定されているためです。

元記事を表示

NFCタグ×MacroDroid×Switch Botで機器を制御

# はじめに
日頃よくSwitch Botを使用して快適に機器の制御をしています。
Switch BotはHubを使用することで、音声インターフェースなどと組み合わせて使用することも多いと思いますが、私はあまり好きではないのでアプリから制御をしています。
ただ、その方法だとまずアプリを毎回開く必要があります。加えて、一定期間でアプリとサーバとのセッションが切れるため、ログインをし直す必要があります。TV、エアコン、照明のON/OFFなどの頻繁に行う制御だと少々使いにくいところがありました。
そこでNFCタグで制御する方法があることを知ったので、試してみることにしました。

# 使用したもの
* Switch Bot機器,Hub
* IFTTT
* NFC Tools
* MacroDroid
* Android スマホ端末
* NFCタグ

# 試したこと
まずiPhoneユーザの方であればショートカットがあるのでそちらでレシピを作成すればすぐにできるらしいのですが、Androidではそれができず、別の手段で設定しなければなりません。。
そんなのIFTTTでいいじゃないかと思われた方

元記事を表示

[Android] ViewModelのRepositoryをHiltでDI

# 前置き
RepositoryをHiltでDIするサンプルコードが少なくてちょっと苦戦したので、メモも兼ねて記事にしようと思いました。今回はKotlinで説明しますが、Javaでも可能です。

まず最初に、RepositoryをDIする必要性について説明させてください。
(ソースコードだけ見たい人はマウスのコロコロを2回転半くらいしてください。)

## RepositoryをDIする必要性
結論から言うと、やるに越したことはないですが目的がなければやらなくても良いかなと思います。

### Repositoryとは
まず、Repositoryパターンについてですが、以下の図のような構成となっています。
![repository](https://developer.android.com/topic/libraries/architecture/images/final-architecture.png?hl=ja)

RepositoryはローカルDB/WebAPIへのアクセスをViewModelから隠蔽する役割を持ちます。
これにより、ViewModelはRepositoryに

元記事を表示

【flutter】 エラー対応 

よくイシューに上がっていますが、自分自身が忘れなように投稿しておきます。

#エラー内容
プラグインにFlutterおよびDartgaが存在しているのに下記エラーが発生するときの対処方法。

flutter doctor

“`
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 1.22.2, on Mac OS X 10.15.7 19H2, locale en-LK)
[✓] Android toolchain – develop for Android devices (Android SDK version 29.0.3)
[✓] Xcode – develop for iOS and macOS (Xcode 12.0.1)
[!] Android Studio (version 4.1)
✗ Flutter plugin not installed; this adds Flutter specific functionality.

元記事を表示

先頭から7bitが年、4ビットが月、残り5ビットが日 (Elixir)

# はじめに
– [Elixir](https://elixir-lang.org/)楽しんでいますか:bangbang::bangbang::bangbang:
– [Android](https://developer.android.com/?hl=ja)でSuicaの履歴をみるというものを作ってみました
– 「先頭から7bitが年、4ビットが月、残り5ビットが日」、「とある2バイトが残高、ただしリトルエンディアン」こういった処理って地味にけっこうたいへんではないでしょうか
– [Elixir](https://elixir-lang.org/)ならパターンマッチですっきり書けますのでご紹介します
– 2021/2/27に開催する[autoracex #12](https://autoracex.connpass.com/event/205985/)というもくもく会の成果とします

![Screenshot_20210226-200730.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808

元記事を表示

[Jetpack Compose] Jetpack Compose Beta!

– https://android-developers.googleblog.com/2021/02/announcing-jetpack-compose-beta.html

## What’s In Beta

– ? Coroutines support
– ? Accessibility support for Talkback – support for other technologies will be in Stable
– ? Easy to use Animations, with a completely new API since alpha.
– Interoperability with Views
– Material UI Components, all with @Sampled code
– Lazy Lists – Jetpack Compose’s take on RecyclerView
– DSL-based Constraint Layout
– Modifiers
– Testing
– Theming and Graphics, w

元記事を表示

RoomでMigration

# 検証環境
この記事の内容は、以下の環境で検証しています。
* Java:open jdk 1.8.0_152
* Kotlin 1.3.61
* Android Studio 3.5.3
* CompileSdkVersion:29

# はじめに
Androidでデータベースを扱う際、Android Jetpackに含まれているRoomを使うことにより、標準APIで実装するより簡潔に実装が出来ます。
しかし、アプリを更新していくうちにテーブルの列を変更したり、テーブルを追加したりします。
その様な更新(マイグレーション)方法について説明した記事になっています。

# DBの変更内容
この記事では数の様に、列の追加とテーブルの追加を行います。
※列やテーブルに特段の意味は有りません。あくまで一例と捉えてください。

![Migration_er_diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99960/1baa4ecd-4e9d-5175-3eef-38ef47ad1d6f.png)

元記事を表示

FlutterからCloud Firestoreのデータ取得 & データ書き込み

## はじめに
Flutterを使って試しに何かネイティブアプリを作ろうと考えていた時、バックエンドの構成で迷ったため、最近流行っている`Cloud Firestore` を使ってみることにした。
そもそもFirebase自体の利用が初めてだったので、まずは簡単な読み書きのテストをしてみた。その時の内容をメモ。

## 実施環境

– Ubuntu 18.04LTS(GCP上)
– Flutter 1.22.6
– Dart 2.10.5
– Android Studio 4.1.2
– VScode 1.53.0
  

## 手順
1.FlutterアプリにFirebaseを追加
2.Firebaseに接続するためFlutter側に設定
3.Cloud Firestoreにデータ書き込み
4.Cloud Firestoreからのデータ取得

※事前準備として以下が完了している前提!
 ・Flutter のサンプルアプリが起動できる状態までのセットアップ。
 ・Firebaseのプロジェクト作成。

## 1.FlutterアプリにFirebaseを追加

まず、Firebaseコ

元記事を表示

続・CameraX でカメラを一時停止する方法

# 概要
[CameraX でカメラを一時停止する方法](https://qiita.com/inuko/items/869bbb8b39138bd7c41c)の続きとなります。

# 前回の課題
androidx.camera:camera-core:1.0.0-alpha05 までは onPreviewOutputUpdateListener を使ってカメラの映像を一時停止・再開することができた。
以降のバージョンでは、onPreviewOutputUpdateListener が廃止され、一時停止・再開させる方法を検討した結果、暗転せずに一時停止から再開する方法が見つからず困っていた。

## 検証環境
camerax-core:1.1.0-rc01

# 今回試したもの
[カスタムの LifecycleOwner の実装](https://developer.android.com/topic/libraries/architecture/lifecycle?hl=ja#implementing-lco)

CameraX は下記のコードでライフサイクルに合わせた処理を自動で

元記事を表示

Pepper SDK入門(24) TopicとTopicStatusでTopicファイルをまな板の鯉化する

#¿What is Topic❓
今回の記事で取り扱うTopicとは、QiChatbotのための会話内容が記述されているものです。
ユーザとPepper間の言葉によるやりとりを定義しています。

#TopicにはStatusがある
Qichatbotは複数のTopicでビルドできます。ファウルズの話[^1]についてのTopic、スキージャンプ・ペアの話についてのTopicなどです。
ファウルズの話をしている時はファウルズのTopicにフォーカスが当たっており、スキージャンプ・ペアの話をしている時はスキージャンプ・ペアのTopicにフォーカスが当たっています。フォーカスされているTopicは基本的に、最後の応答を返したTopicです。getFocusで、今フォーカスされているTopicを取得することもできます。
[^1]: ここでは円城塔の『オブ・ザ・ベースボール』に登場する、人が降ってくる町の意。バットで落ちてくる人を打ち返します。

TopicStatusは、そうしたTopicファイルの有効・無効を設定できる値クラスです。

“`
fouls.top
u:(野球) 野球最高!!
`

元記事を表示

AndroidStudio 「Image Asset」の使い方

#Image Assetの使い方について
###Image Assetは、Androidアプリを開発する上で、簡単にデバイス上に表示するアイコンを作成できるAndroidStudioの機能です。
使い方についてまとめてみました。

まず、Image Assetのウインドウの立ち上げですが、プロジェクトウインドウ上で右クリックします。
メニューの「New」をポイントして、その中から「Image Asset」を選びます。
![スクリーンショット 2021-02-24 22.46.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794916/183f8276-2cbf-6532-d620-0c1b99cc319e.png)

そうすると、「Configure Image Asset」と書かれたImage Assetのウインドウが立ち上がります。
![スクリーンショット 2021-02-24 22.53.51.png](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

Koinで動的な引数の解決

KoinでのDI時、パラメータを動的に変更する方法の紹介です。

Daggerに慣れている人向けに解説しますと、Injectする引数を可変にしたい場合、Daggerでは`AssistedInject`を使うことになると思います。
これをKoinでどうやるか、という話になります。

Koinについてはこちらから。
– https://insert-koin.io/docs/quickstart/android

# パラメータ宣言
公式的には以下のドキュメントで紹介されています。
– https://insert-koin.io/docs/reference/koin-core/definitions#declaring-injection-parameters

これを実際に書いて、多少複雑な使い方を紹介していきます。

## module定義
例として、Fragmentに引数としてIDを渡し、それをViewModelの引数にまで引っ張りたいときを考えます。
viewModelが以下の様に可変の引数としてIDを、Injectする予定の引数としてUseCaseを一個取りたいとします。

元記事を表示

DatePickerDialogとSQLite

DatePickerDialogを用いた日付取得とSQLiteへの連携について

GitHubを見にきてください。

元記事を表示

【Android】RecyclerView+RadioButtonの作成


RadioGroupを使用せずに作成します。

# Mainレイアウト作成
RecyclerViewの配置

“`activity_main.xml

  • OTHERカテゴリの最新記事