Android関連のことを調べてみた2020年11月30日

Android関連のことを調べてみた2020年11月30日

MVVM+Repositoryのアーキテクチャを使っています②

#この記事は
・前回([MVVM+Repositoryのアーキテクチャを使っています①](https://qiita.com/mi_iroha/items/9d4da0c1a4f76864eaab))の続きです。

#もくじ
今回はViewModelとRepositoryの部分について書いていきます。![スクリーンショット 2020-11-29 212627.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/e1257630-2660-6b81-efc4-1573b3948adf.jpeg)
②はViewModelから非同期処理で`async{}.await()`や`withContext()`を使ってRepositoryにある関数を呼び出します。Repositoryにはデータベース(今回はFirestore)にアクセスする処理が直接かいてあり、`resume()`という関数で処理の結果を再びViewModelへ返します(⑤に当たる)。便宜上少しだけ⑥のRxRelayやLiveDataについて

元記事を表示

【Android】TabLayoutのIndicator色をtabごとに設定

`setSelectedTabIndicatorColor`が非推奨になったので、`addOnTabSelectedListener`を使用。

“`MainActivity.kt
tab_layout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(p0: TabLayout.Tab?) {}
override fun onTabUnselected(p0: TabLayout.Tab?) {}
override fun onTabSelected(p0: TabLayout.Tab?) {

元記事を表示

React Nativeのメリット・デメリット

#はじめに
先日、React Nativeを使った個人開発アプリをリリースしました。
そこで、この記事ではReact Nativeでアプリを開発してみて良かった点、良くなかった点を紹介したいと思います。

「React Nativeを始めようかな」と考えている人の役に立つことができれば嬉しいです。

#メリット❶ 学習コストが少ない
1つ目のメリットは学習コストが少なかったことです。
私は今回のアプリを開発する前は、JavaScriptのライブラリであるReactでWebアプリケーションの開発を行っていました。
React Nativeはコンポーネントの概念などReactと共通している部分が多いので、非常に開発に取り掛かりやすかったです。
Reactを使用してWebアプリケーションの開発を行っている方であれば、React Nativeの学習は参入障壁が非常に低く、取り組みやすいと感じます。

#メリット❷ コードの修正が簡単
2つ目のメリットはコードの修正が簡単なことです。React Nativeは、ホットリロード機能があるため、自分が書いたコードを保存すれば、自動でリロードしてくれま

元記事を表示

firebaseのエラー”Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)”の解決策

#firebaseを使ったgoogle認証
flutterでfirebaseauthを使ったgoogle認証を実装しようとしたら、
android環境で以下のようなエラーがでた。

“`
E/flutter ( 4434): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)]
Unhandled Exception:PlatformException(sign_in_failed,com.google.android.gms.common.api.ApiException: 10: , null, null)
“`

色々ググってみたら、fingerprintを登録すればいいと書いてあるので、
https://developers.google.com/android/guides/client-auth
の言う通りに下記を実行したけどうまくいかない、、、

“`
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
“`

#最終的な解

元記事を表示

1行編集で自分のプロジェクトでDaggerのAnnotation ProcessingをAndroid Studioでデバッグする

Daggerが内部でどんなモデルを作ってどんな処理をしているんだ。。ってなったり、エラーになって、中身のコードを読みにいって、この変数に何が入っているんだろう。。ってなったりすることが稀にあるのでメモしておきます。

appモジュールなどでcompileOnlyでkaptで使うコンパイラの依存関係を追加して、Android Studioが使っていデバッグしたいコードを見られるようにします。プロジェクトでの編集はこれだけです。デバッグでの利用が終わったら消してください。

“`kotlin
dependencies {
// compileOnlyで追加する
compileOnly ‘com.google.dagger:dagger-compiler:2.30.1’
// hiltなら以下など
compileOnly “com.google.dagger:hilt-android-compiler:2.29.1-alpha”
}
“`

デバッグしたいコードをcommand + option + oなど(macでのFind simbolのショートカッ

元記事を表示

ChromeCustomTabsでできること~ダークテーマ対応~

今更の話題ですが、CustomTabsIntentにダークテーマ用メソッドが増えていることに気づき、どういうことができるのかを今一度整理してみようと思います。

ダークテーマ対応のメソッドについては、androidx.browser:browser:1.2.0で追加されています。
https://developer.android.com/jetpack/androidx/releases/browser#1.2.0

検証用のアプリは[こちら](https://github.com/ohmae/custom-tabs-sample)、また、CustomTabsのインターフェースを実装した、というか、それ以外の機能の無いブラウザーのソースコードは[こちら](https://github.com/ohmae/custom-tabs-browser)。いずれもMIT Licenseで公開していますのでご参考まで。

また、CustomTabsの機能の中には説明が全く無い、もしくは、あってもコメント程度で、どうやって使うのか分からないメソッドや、どういう意味があるのか分からないコールバックと

元記事を表示

Flutter入門メモ:開発環境構築編

## 経緯

久々に新規でモバイルアプリでも作ろうかと思い、
一人で趣味で作るレベルだと、Swift・Kotlinでそれぞれ構築するのは掛けられる工数的に現実感が無いので、
1ソース系を試してみようかと。

1ソース系は他にも選択肢がありますが、
React Nativeはなんか好みではないのと、Apache Cordovaは嫌な思い出しかないので、
流行ってるFlutterでやれないかなと、[公式](https://flutter.dev/docs/get-started/install)を見ながら少し試してみる事にしました。
今回は開発環境までのメモ。

## 確認環境

* macOS Catalina
* Essential Essential Phone PH-1 (Android 10)

### 前提

* [Homebrew](https://brew.sh/)がインストールされている。

※今回確認を実施したMacでは、XcodeやIntelliJ、VS Codeが予めインストールされています。

## 手順

Flutterのインストール。

“`shell
$

元記事を表示

【Kotlin】DialogFragmentからActivityへ値を渡す

###はじめに
AndroidアプリでDialogFragmentを実装する際、普通の?(はい、いいえの二択のヤツ)ダイアログではなく、EditTextなどを含むダイアログを作成しその値をActivityへ渡す方法です。
やり方はいくつかあるらしいのですが、今回は新しくインターフェースを実装するやり方です。
Fragment自体の実装については割愛する部分が多めです。
おかしな所があれば教えていただけると幸いです!

###構成

MainActivity.kt:Fragmentの呼び出しとFragmentから受け取った値を表示するだけ。
CustomDialogFragment.kt:ダイアログ用のFragmentです。
dialog_layout.xml:EditTextを含むダイアログ用のレイアウトファイルです。

###レイアウト

先にレイアウトを実装しておきます。
MainActivityはなんでも良いので割愛します。
dialog_layout.xmlはres/layout下に作成します。

“`xml:dialog_layout.xml

元記事を表示

AndroidのRecyclerViewでフォーカスを中央にキープする

AndroidのRecyclerViewでフォーカスを中央にキープする必要があり、ググったのですが日本語の記事がなかったので、記事にします。

## やりたいこと
メニュータブを表示する際に、フォーカスを中央にキープする。
※menu1フォーカス中もmenu2フォーカス中もセンターにキープする。
 

## ポイントは3つ
– HorizontalGridViewを使う。(縦の場合はVerticalGridView)
– windowAlignmentをWINDOW_ALIGN_

元記事を表示

KeyStoreのjksファイルを復元する方法

拡張子jksは、KeyStoreファイルです。(ここではAndroidアプリ開発で利用)

CIの環境変数に入れようと思ったところ、中身がバイナリでした。

## 方法

以下でテキストにデコードできます。

“`sh
openssl base64 -A -in .signing/release.jks
“`

自分の場合は2764文字のテキストが出力されました。

CI上では、↑で出力されたbase64テキストを環境変数に設定して、
以下のようにまたjksにエンコードして使うのが一般的のようです。

“`sh
echo $KEYSTORE_BASE64 | base64 -d > .signing/release.jks
“`

## note

タイトルはよく知らない人(自分)がこんなキーワードで検索する。というのを考えて設定しました。

中身自体はいろんな記事にありますがQiitaはピンポイントで索引できるといいなと思いました。

元記事を表示

Resources – Sams Class

#日本人
SAMS CLASSさんと共有したいと思います。
お楽しみください。
https://translate.google.com/translate?sl=en&tl=ja&u=https://samsclass.info

サムスクラスオールドリサーチ:
https://translate.google.com/translate?sl=en&tl=ja&u=https://samsclass.info/old-research.htm

サムスクラスオールドクラス:
https://translate.google.com/translate?hl=&sl=en&tl=ja&u=https%3A%2F%2Fsamsclass.info%2Fold-classes.html

サムスクラスワークショップ-モジュール環境は、連邦政府の標準品質のワークショップに大学レベルのトレーニングを提供します。知識と知恵。

https://translate.google.com/translate?sl=en&tl=ja&u=https://samsclass.info/w

元記事を表示

[Android]HomebrewでAndroidSDKをインストールする。

– Mac利用者で、`Homebrew`を利用してソフトウェアを管理している方、`AndroidSDK`も`Homebrew`で管理したい方向けです。

## `android-sdk`のインストール

– インストール方法は以下です。

“`
$ brew install android-sdk
“`
## `platform-tools`のインストール

– `Homebrew Cask`に`platform-tools`という`Formulae`がありそちらからもインストールできますが、先ほどインストールした`android-sdk`に付属している`sdkmanager`を利用してインストールします。
– `android-sdk`は不要で、`adb`や`fastboot`を利用したい場合、`platform-tools`単体でインストールすることも可能です。 そのため独立した`Formulae`が用意されているのでしょう。
– [SDK Platform-Tools リリースノート  |  Android デベロッパー  |  Android Developers](htt

元記事を表示

MVVM+Repositoryのアーキテクチャを使っています①

#もくじ
・MVVM + Repositoryについて
・階層について
・DataClass実装
➡ 次回はRepositoryとViewmodel部分の実装について書きます

#MVVM+Repositoryとは
アーキテクチャの1つです。他にも様々なアーキテクチャがあるのだと思いますが、[公式ガイド](https://developer.android.com/jetpack/guide?hl=ja#recommended-app-arch)ではMVVMの形式が推奨されておりますので、PeerRadioでもMVVMを使用しております。しかし、そこにRepositoryというのがくっついていますね。これはDBを扱う部分で、MVVMから分けて作っているということです(分けるのが必須ではないです)。

MVVM+Repositoryの登場人物とその関係性は以下の画像の通りです。
![スクリーンショット 2020-11-27 113309.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/37

元記事を表示

Androidアプリbuild without IDE

## 最初に
プログラミングを始めた時、C言語、JavaでHello Worldを作成したことを思い出した。
IDEがなくて、テキストエディターとコマンドラインで作成、コンパイルして実行できました。
Androidの勉強ですが、Android Studioを使って、Hello Worldのプロジェクトを作成する記事はほとんどです。
Androidアプリの構成とビルドについて、もっと深く理解するため、本編はIDEを使わなくて一からプロジェクトを作成し、実行するまで紹介します。

## ビルドツール
まず、Gradleをインストールします。
AndroidプロジェクトはGradleベースで複雑なビルドシステムを構築しているため、Gradleの勉強は必須になります。
https://gradle.org/releases/ にて最新バージョンのGradleをダウンロードしてインストールします。
すでにAndroid Studioで実行したことがあれば、ダウンロード、インストールしなくてもいいです。

“`
Linux、Mac:
~/.gradle/wrapper/dists
Windows

元記事を表示

flutter build apk –release だけ Could not resolve all files for configuration ‘:releaseRuntimeClasspath’.エラー

flutter build apk –releaseのときだけ、以下のエラーが出てapkが作れない問題でハマりました。

“`
FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
———–
* What went wrong:
Execution failed for task ‘:generateReleaseRFile’.
> Could not resolve all files for configuration ‘:releaseRuntimeClasspath’.
> Could not find com.google.firebase:firebase-bom:25.12.0.
Searched in the following locations:
– https://storage.googleapis.com/download.flutter.io/com/google/firebase/firebase-bom/25

元記事を表示

[Android]Navigation Component で StartDestination を popBackStack したときの動作

# はじめに

Navigation Component で StartDestination を popBackStack すると currentDestination が null になると以下に記載がある。currentDestination が null になったときの挙動について詳しくは書かれてはいなかったので調べてまとめようと思います。(本記事は Navigation Component v2.3.1 で動作確認しています。)

“`
https://developer.android.com/guide/navigation/navigation-navigate?hl=ja#back-stack

このメソッドが false を返すと、NavController.getCurrentDestination() は null を返します。
新しいデスティネーションに移動するか、アクティビティに対して finish() を呼び出してポップを処理する必要があります。
“`

# 検証環境を構築する

次のような FirstFragment と SecondFragment

元記事を表示

3. Android学習 イベントリスナー編

**勉強できること**
Viewに対するイベントなどを検知して、それをトリガーに処理を実行できるようになる。

**環境**
AndroidStudioのバージョン:4.0.1
言語:Java

# イベントリスナーとは
スマートフォンの操作では、タップイベント、長押し、スクロール、戻るボタン操作などが発生します。
それらを検知するものがイベントリスナーです。

# リスナーの種類
イベントリスナーを抜粋して紹介します。

|リスナー名|メソッド|詳細|
|:–|:–|:–|
|クリックイベント|onClick()|ボタンなどのViewに対するタップ(クリックイベント)を検知する|
|長押しイベント|onLongClick()|ボタンなどのViewに対する長押しイベントを検知する|
|ハードウェアボタンイベント|onKey()|ホームボタンや戻るボタン押下時を検知する|

他にもViewによりスクロールや、タッチイベントなど色々なクリックリスナーが提供されています。
必要都度調べてみてください。

# 記述例

“`java:MainActivity.java
public

元記事を表示

【Android】JavaでSHA256を計算するアプリを作ってみた

# 雰囲気

なんか、
![Screenshot_20201126-222656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188881/0033a147-5904-7541-2ce1-c9cb96ac467e.png)

こんな感じで動く。
![Screenshot_20201126-222702.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188881/29f35b06-0f6b-acf0-ae69-ac055df843c9.png)

# 環境

Windows10
AndroidStudio 3.5.0.0
Android SDK 26.1.1
(Pixel OS10で動作確認)

# MainActivity.java

“`java
package com.weare2434.sha256;

import androidx.appcompat.app.AppCompatActivity;

imp

元記事を表示

BigDecimal の stripTrailingZeros 使ってる人は気をつけて

## はじめに

お仕事で BigDecimal の [stripTrailingZeros](https://developer.android.com/reference/kotlin/java/math/BigDecimal#stripTrailingZeros()) というメソッドを使っていて悲しくなったので記事にしました 😥

## stripTrailingZeros って何?

BigDecimal のメソッドで、末尾のゼロが削除された新しい BigDecimal を返します。

簡単にいうとこんな感じ

> 0.00 であれば 0
0.10 であれば 0.1

## 何があったのか

動作確認をしていると、 0.00% と表示されてしまうことがありました。

「あれ?ちゃんとエミュレーターでも動き確認してたのになぜ??」

調べてみると stripTrailingZeros が正常に動いてなさそう、、!

なぜ〜〜〜〜 :rolling_eyes:

## 原因

なんと、JDK7 だと正常に動作しないとのこと。。。

そりゃないよ。。

なので一部の An

元記事を表示

Androidで始める機械学習2 (FirebaseML CloudAPI)

# はじめに

前回 [エッジでサンプルを動かす記事](https://qiita.com/marchin_1989/items/517885984167e6855c13)を書きましたが、今回はエッジ(MLKitやTensorflowLite)ではなく、FirebaseMLのCloudAPIを利用してみました。

他にもありますが、今回は以下のAPIを試すために、Androidの[サンプルアプリ](https://github.com/marchin1989/FirebaseMLSample)を作成しました。

– Text Recognition
– Image Labeling
– Landmark recognition

# サンプルアプリについて

写真を撮ると、その画像をFirebaseMLのCloudAPIに投げ、結果を表示します。
右上のボタンでAPIを切り替えられます。

  • OTHERカテゴリの最新記事