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

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

Androidで学生証(Felica)のIC残高を読む

# はじめに

この記事は、[SLP KBIT Advent Calendar 2019](https://adventar.org/calendars/4214) の8日目の記事です。

最近、AndroidのNFC機能を使って、ICカードのデータを読み取ることができることを知りました。
そこで「自分の学生証も読み取れるのでは?」と思ったので試してみました。

# 読み取るデータについて

今回は学生証に格納されている大学生協のIC残高を読み取ってみたいと思います。

自分が持っている学生証は、Felicaに対応したICカードになっているので、NFCのFelicaに対応した端末で読み取ることができます。Felicaの規格に関しては、 [FeliCaカード ユーザーズマニュアル 抜粋版](https://www.sony.co.jp/Products/felica/business/tech-support/st_usmnl.html) にまとめられています。

学生証のデータ構造に関しては、 [大学生協Felicaの仕様](https://gist.github.com/oboeni

元記事を表示

TechTrainを利用してチームでアプリ開発をした話(Android編)

# はじめに
部活のプロジェクトで「技術好きの学生向けのSNSアプリを開発しよう!」ということになりチーム開発をすることになりました。
そこで、TechTrainというエンジニア志望のU30向けメンタリングサービスを利用し、インターンという形でリリースを目指して開発を続けてきました。
結果としてはリリースならず…!となってしまいましたが…
メンターさんの指導のもと、実務レベルでのアプリ開発を4~12月の8ヶ月間行なってきたので得られたものが非常に多かったです…!
今回、僕はAndroid担当兼PMというポジションでこのプロジェクトに関わってきたので、それぞれの立場から記事を書こうと思う次第…
本記事は前半のAndroid編です!
今回、Android開発をした際の道のりを順を追って書いていきます。
また、メンターさんから頂いたアドバイス等の中から、ぜひ発信したいと思った内容を一部お伝えしたいと考えてます。
なお、Qiita初投稿なので、お手柔らかに…

# アーキテクチャの選定
まず、アプリケーションの全体の大まかな構造を決定するに当たって考えなくちゃいけないのが「

元記事を表示

実際にDIしてみた

# 前置き
[前回](https://qiita.com/yogita109/items/d0e8cc8c7f873b0c01ef)はDIの意味について考えてみたが、では実際にDIとはどのようにすれば良いのか。
DIのやり方は複数あり、それぞれの方法について説明していきます。

# 内部でDIした場合
まず何も考えずにDIしてみます。

“` kotlin
interface Engine {
fun start()
}

class GasolineEngine: Engine {
fun start() {
println(“start”)
}
}

class Car {
// GasolineEngineクラスのインスタンスをDIしている
private engine = GasolineEngine()

fun start() {
engine.start()
}
}

fun main(args: Array) {
val car = Car()
car.start(

元記事を表示

ExoPlayerで早送りと巻き戻しの秒数を設定する

定義しているlayoutファイルのViewに
app:fastforward_incerment、app:rewind_incrementを追加する。

“`

“`

参考記事(Exoplayerを丁寧に解説しているからとても分かりやすい):
https://medium.com/fungjai/playing-video-by-exoplayer-b97903be0b33

元記事を表示

Androidの実機でデバック中に配置エラーが出た場合の対処

メモ書きみたいなものですが、ちょっとハマったので書きます。

Xamarin Formsのアプリを作成中、実機をアップグレードしたら下記のエラーで配置できなくなった。エミュレータだと実行できる。

“`Mono.AndroidTools.RequiresUninstallException: The installed package is incompatible. Please manually uninstall and try again.
“`

まあ、手動でuninstallしろってことなんだけど、既に実機のアプリは削除してある。やり方がわからなくて調べた。

どうやらadbコマンドを使うらしい。

VS2019の「ツール」→「Android」→「Android Adb コマンドプロンプト」でAndroid Adb コマンドプロンプトを立ち上げる。

「よく使うadbのコマンド」を参照する。
https://qiita.com/t2low/items/cb37cec5f864c4748e14

アプリ名は「FileUploader」なので、
“`adb shell p

元記事を表示

【Androidアプリ】音声テキスト変換して記録・再表示するアプリが出来た♪

このところ取り組んできたスマホアプリ、「音声をテキストで記録・再表示するアプリ」が出来ました。
英語、日本語、そしてタイ語で記録再表示を確認できました。
入力はGoogle音声入力を利用するので、対応する言語は使えそうです。

**以下の表は一度保存した3つのファイルを表示したもの**

| 1 | 2 | 3 |
|:-:|:-:|:-:|
| ![test.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/ae62ad78-e389-1e15-739b-063c236b8992.jpeg)|![test2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/3501631d-d29c-a439-e197-827d4ca410f8.jpeg)|![testfile.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2337

元記事を表示

Material Componentsを使ってDark ThemeのElevation Overlayを実装する方法

この記事は [Android Advent Calendar 2019](https://qiita.com/advent-calendar/2019/android) の7日目の記事です。

# はじめに

マテリアルデザインを取り入れているアプリでDark Themeをサポートする場合、アプリのThemeを `Theme.AppCompat.DayNight` の派生Themeに変更したり、ColorやDrawableの `-night` の代替リソースを用意したり、といった作業を行うことになりますが、それに加えて必要になるのがElevation Overlayの適用です。

本記事では、Elevation Overlayとは何かを説明し、[Material Components for Android](https://github.com/material-components/material-components-android) を使ってElevation OverlayをViewに適用する方法を説明します。

なお、この記事の執筆時点 (2019年12月7日) で、Ma

元記事を表示

Dependency Injectionの意味について考える

# Dependency Injectionとは
日本語で直訳すると依存性の注入と訳されます。
DIとはなんぞや、を考えるために今回は
依存という単語と注入という単語
に分けてDIについて考えていきます。

# プログラミングにおける依存とは
そもそも依存とは、それがなくては生きていけない状態という意味です。
現実世界で一例を考えてみると、車というものはエンジンというモジュールが必要であり、
エンジンが無いと走行することができません。
この状態は、車はエンジンに依存している、という風に表現できます。

では上記をプログラムの世界で表現してみましょう。

“`kotlin
class Car {
// 車はエンジンが無いと走行することができないので、エンジンが必須です。
val engine = Engine()

// 車を走らせるためにエンジンをかけます
fun start() {
engine.start()
}
}
“`
CarクラスはEngineクラスの参照を必要

元記事を表示

星を使った(使ってない)AR

# きっかけ

[レジャー好きな人の支援](https://speakerdeck.com/miyatanam/ar-support-for-leisure-lovers)

AR_FukuokaでLTした。やったことは星を利用したAR(\*1)。この年になって星を使う事になるとは思わなかったが、やってよかったと思ってる。

![ペルセウス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42445/3e4efa81-0307-0e10-f4be-88509ccad091.png)

星座を利用するって壮大

CircleCIお触り!Androidのビルド実行~サーバへのapkアップロードまでやってみた

#1.経緯
今回、CircleCIって便利そうだけどどうなのっていうのが社内で意見があり、これから新しくサービスやるかもっということだったので、触ってみました。
サーバ側で導入したいとのことですが、私、AndroidがメインなのでまずはAndroidをビルドして、サーバにapkアップロードしたいというところまで。
また、アプリ側的にはあくまでも社内のテスト時の配布用とかなので、今の所は利用する予定はないのですが、サーバ的に本番へのマージ作業とかの際、Push時にそのまま処理走るのが困るので、一度処理を止めて確認した上で後続の処理が走らせれるようにするところまでをやってます。iOS側もやる予定なので出来たらその時に記事書くかもです。
テスト実施してから、ビルドを走らせるとかはゆくゆくできるようにしたいなと思います。

#2.やったこと
【Androidのビルド,Apkの吐き出し】->【CircleCIの管理画面での承認待ち】-> 【社内のサーバにapkをアップロード】 
*正確には最後のアップロードまでは出来ていません。。。詳しくは3.導入の流れを参照

#3.導入の流れ
今回はテス

Androidの赤外線機能を使ってテレビを操作してみた

使わないでホコリを被っていたAndroid端末に赤外線機能が付いていたので、テレビリモコンとして使えないかイジイジしてみたお話です。

# 環境
端末名:HUAWEI honor8
テレビ:SHARP AQUOS LC-32H11

# ConsumerIrManager
赤外線機能を使うには `ConsumerIrManager` を使います。APIレベルは19。
https://developer.android.com/reference/android/hardware/ConsumerIrManager

`getSystemService` で `CONSUMER_IR_SERVICE` を指定する形です。

“`kotlin

val consumerIrManager = getSystemService(Context.CONSUMER_IR_SERVICE) as ConsumerIrManager
“`

# パーミッションの追加

`ConsumerIrManager` のメソッドをそのまま使おうとすると `java.lang.SecurityExcepti

Epoxy + PagingLibrarySupportで追加読み込み機能を実装してみる

# はじめに
この記事は、[ZOZOテクノロジーズ #4AdventCalendar2019](https://qiita.com/advent-calendar/2019/zozo_tech4)の記事です。
昨日は[@ysk_ur](https://twitter.com/ysk_ur)さんの「[先行指標と遅行指標から見るプロダクトマネージャーの役割とは](https://note.com/yskur/n/n518e055d2df1)」の記事でした。

ZOZOテクノロジーズでは、他にもAdventCalenderを書いている方がいらっしゃるので、よかったらみていってください!

– [ZOZOテクノロジーズ #1AdventCalendar2019](https://qiita.com/advent-calendar/2019/zozo_tech)
– [ZOZOテクノロジーズ #2AdventCalendar2019](https://qiita.com/advent-calendar/2019/zozo_tech2)
– [ZOZOテクノロジーズ #3AdventCalenda

DIについてメモ

# DIを調べると、、、

DI 【 Dependency Injection 】 依存性注入

DIとは、コンピュータプログラムのデザインパターンの一つで、オブジェクトなどの間に生じる依存関係をオブジェクト内のコードに直接記述せず、外部から何らかの形で与えるようにする手法。

[参考]http://e-words.jp/w/DI.html

# 依存性注入(Dependency Injection)とは?

– Dependencyとは

– サービスとして使用できるオブジェクトのこと。

– Injectionとは

– オブジェクト(サービス)を、それを使うオブジェクト(クライアント)に渡すこと。

ということで上記をまとめると

**あるオブジェクト(サービス)を別のオブジェクト(クライアント)に渡すことを依存性注入という**

# DIのメリット・デメリット

– メリット
– クラス同士を疎結合にできる、独立性を高められる
– クラスの単体テストがやりやすくなる
– クラスの再利用性が向上する

– デメリット(DIのデメリットというかDIフレームワ

Androidで外部メディアファイルのメタ情報を取得する

Androidでメディアファイルのメタ情報を取得するには、android.media.MediaMetadataRetrieverクラスを使います。

本ブログでは、Musicフォルダ(Environment.DIRECTORY_MUSIC)の中にある音楽ファイルのメタ情報を取得する場合について説明します。

まず、外部メディアファイルのメタ情報を取得するサンプルプログラムを載せておきます。

“`java:MainActivity.java
private void getMediaMetadataInfo() {
List arMediaPath = new ArrayList();

// 外部メディアのパスを取得
// getExternalStoragePublicDirectory deprecated in Android Q
File fileDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);

String st

Firebase consoleで登録したFCM(プッシュ通知)で受け取れるデータメモ

FCM(Firebase Cloud Messaging)は、アプリがForegroundの場合と、Backgroundの場合でデータの受け取り方と形式が異なります。
その辺りを簡潔にまとめました。

#### 公式リファレンスは[「こちら」](https://firebase.google.com/docs/cloud-messaging/android/receive?hl=ja)

## アプリがForegroundの場合
FirebaseMessagingService#onMessageReceived で以下のデータを受信できます。
ちなみに、画面上に通知は表示されません。

“`
============================
Class : RemoteMessage
From : xxxxxxxxxxxx
To : null
MessageType : null
MessageId : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SentTime : 157559472969

AndroidのEdge to Edgeを理解する

## Edge to Edgeとは
Android 10の情報が出始めてからEdge to Edgeという単語が聞かれるようになりましたが、平たく言うとアプリのコンテンツを表示する領域をStatusBarやNavigationBarのところまで拡大しようという感じです

参考:

– https://developer.android.com/guide/navigation/gesturenav
– https://medium.com/androiddevelopers/gesture-navigation-going-edge-to-edge-812f62e4e83e

アプリのコンテンツ領域を拡大するという仕組みはAPI 21や部分的にはそれ以前からあり、最近になってEdge to Edgeと呼ばれるようになったという感じです
ちなみに、自分は透過UIとかいう呼び方をしていました。以前にQiitaで[StatusBarに色を付けてNavigationBarを透明にしてCoordinatorLayoutを使おうとしたらハマった](https://qiita.com/MeilCli

Androidアプリの譲渡で取引IDがエラーになる問題

GooglePlayで公開中のAndroidアプリを別のアカウントに譲渡する際に起きたエラーとその解決について共有します。アプリの譲渡はヘルプにある手順通りに進めます。
https://support.google.com/googleplay/android-developer/answer/6230247?hl=ja

取引IDを入力した際、以下のようなエラーが出ます。
> 入力した取引IDがこのデベロッパーアカウントのIDと一致しません

![スクリーンショット 2019-12-07 0.15.29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2490/d902fbc6-2871-ea27-bba6-4a3dbec66c04.jpeg)

これは、取引IDが特定のフォーマットのものだと起きる問題のようで、IDの先頭を取り除くと解決するようです

変更前
`01234567890123456789.token.0123456789012345`
変更後
`token.012345678901234

Androidアプリの内部テストを実施する

初めてAndroidアプリをリリースするので、[公式ドキュメント](https://support.google.com/googleplay/android-developer/answer/3131213?hl=ja)を見ながら内部テストしようと作業してみた所ドキュメントが若干違ってて色々迷いましたんで記録しておきます。

# 前提
– GoogleDeveloperアカウントを保有している
– GooglePlayConsoleにログインできる
– Android App Bundle作成済
– 開発して署名したapkファイルが出力済

# 手順
## ステップ0:アプリ登録
[GooglePlayConsole](https://play.google.com/)にログインし右上の[アプリの作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/464e5e30-4b88-ec09-279a-415c5bd599be.png)
アプリ作成画面で言語とタイトル

Android StudioでJsonを使う方法

## はじめに
外部からAPIとか使ってJsonを持ってくる方式については多かったけども、
内部に置く方法が意外と少なかったから覚書程度に書く。

## 内容
+ AndroidでJsonを使おう
+ AndroidStudioの内部にJsonを置いて使う方法

## Json準備
### Jsonファイル
今回使うJsonファイル

“` json:Sample.json
{
“sample”: [
{
“name”: “Andy”,
“age”: 31,
“gender”: false,
“other”: “”
},
{
“name”: “Bob”,
“age”: 14,
“gender”: false,
“other”: “Student”
},
{
“name”: “Carry”,
“age”: 22,
“gender”: true,
“other”: “Rich”
},
{

Using Dagger in your Android app(Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.)

[Android Dev Summit 2019
Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.](https://codelabs.developers.google.com/ads19/)

[Using Dagger in your Android app](https://codelabs.developers.google.com/codelabs/android-dagger/index.html?index=..%2F..ads19)の日本語訳

# 1.はじめに
このコードラボでは、Dependency Injection(DI)の重要性を学習し、大規模プロジェクトに対応する堅実で拡張可能なアプリケーションを作成します。Daggerは依存関係を管理するDIツールとして使用します。
依存性注入(DI)は、プログラミングで広く使用されている手法であり、Android開発に適しています。 DIの原則に従うことで、優れたアプリアーキテクチャの基礎を築きます。
依存性注入を