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

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

RecyclerViewでDiffUtilを使うならAsyncListDifferが便利

## はじめに

RecyclerViewでnotify()系のメソッドでアイテムを更新することは多い思います。
最も手軽な方法はnotifyDataSetChanged()でアイテム全体を更新することですが、アイテムひとつを更新したい時などでは無駄にViewが再生成されパフォーマンスが劣ります。
更新前後のリストを比較して、必要最小限のアイテムを更新することが望ましい方法です。

## DiffUtilとは
DiffUtilは2つのListを比較して差分を計算するユーティリティクラスです。
これをRecyclerViewで使うことで、変更があった際に差分だけ更新され、更新された部分にアニメーションがかかるようになります。
このDiffUtilは、Listのサイズが大きい場合や複雑な場合には、計算に時間がかかるためバックグラウンドスレッドが推奨されています。
そしてこの非同期処理を担ってくれるのがAsyncListDifferです。AsyncListDifferを使えば、KotlinCoroutineなどで非同期処理を自分で書くことなく差分を計算できます。

## RecyclerVi

元記事を表示

AndroidとSesameとNFCで開けゴマ BLE-改良版

2020/05/12追記:分割送信データの送信完了確認したら、残りを送信するように修正
        IDカードの等価式の修正

#目的
家の鍵を「かざす」だけで開けたい!

AndroidとSesameとNFCで開けゴマ BLE版
https://qiita.com/sakujira/items/93998534d8358b387ee9
の動作が不安定すぎたので、改良しました。

##成果物
AndroidManifest.xml は同じ

kotlinx.coroutinesを使うので、
buid.gradle(app)に以下を追加

dependencies {
・・・・
implementation ‘org.jetbrains.kotlinx:kotlinx-coroutines-core:X.X.X’
}

MainActivity.kt

package com.example.myapplication

//UIのためのおまじない
import android.os.Bundle
import androidx.appcompat.app.App

元記事を表示

Unity 2019.2 はAndroidでは使い物にならないのでとっとと投げ捨てろ

# tl; dr(最近流行ってない気がするこの言い回し)
Unity 2019.2 で Android の CallStatic やって親クラスの static メソッドを呼ぶと死ぬ → Unity Mobile Notifications 使うとこれが原因で死ぬ → 公式も直すつもりがないので Unity 2019.2 は使ってはいけない

## 発端

– https://forum.unity.com/threads/2019-2-14f1-or-above-androidjavaexception-java-lang-nullpointerexception.791952/

`2019.2.8f1` では問題がない、少なくとも `2019.2.14f1` `2019.2.15f1` で問題が起きる。

### 原因

 子クラスのクラスオブジェクト、あるいはクラスインスタンスオブジェクトで親(基底)クラスの static メソッドを呼ぶと、子クラスにその static メソッドが生えてない場合、親に向かって探しに行かずに死ぬようになった。

### そもそもおすすめの解法

元記事を表示

Android Remote Debug (adb)

# アプリの動作確認を無線で行う方法
皆さん,Android AppのDebugをするとき,USBが煩わしくなりませんか?
今回はソレを解決するDebugを無線で行う方法についてです.
意外と使っている人が少なかったので書きました.

## 前提条件
adb (Android Debug Bridge)が利用可能
(adb導入については[以下の記事](https://qiita.com/hikaru__m/items/15baae425b6fad25da05)を参照)

## 環境
macOS Catalina10.15.4
Android Studio 3.6.3
Flutter, Kotlin, Javaでの開発
PCと端末が同じWifi環境下であること
端末がdebug modeであること

## 接続方法
Android端末とPCをUSBケーブルで接続して以下のコマンドを実行
ここでは端末の5555番Portを指定

“`shell:sh
$ adb tcpip 5555
“`

端末の[設定]>[端末情報]>[端末の状態]からIPアドレス(IPv4)を取得
(IPアドレス

元記事を表示

AndroidでPKCEのcode_challengeをS256で生成する方法

## 概要

OAuthの[PKCE](https://tools.ietf.org/html/rfc7636)を実装したAPIなどを呼び出す際に必要になる `code_challenge` の生成方法のTips

## 具体的には

[ここ] (https://tools.ietf.org/html/rfc7636#section-4.2) の `4.2. Client Creates the Code Challenge` に記載のある以下の `code_challenge` をAndroid標準機能を使って作る方法

“`
S256
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
“`

## やり方

以下の “codeChallenge” でString型の`code_verifier`を`code_challenge`に変換可能。

“`
import android.util.Base64
import java.security.MessageDigest

val Strin

元記事を表示

AndroidでApp Actionsの音声制御を試してみて、うまく動かなかった話

# 概要

Androidアプリを音声で制御する方法を調べ、[App Actions](https://developers.google.com/assistant/app/overview)のサンプルを実装してみた結果、期待通りの動作をしなかった話です。(ただし、現在対応方法を調査中です。)

# 目標

アプリの特定の機能を音声から制御できるような仕組みを実装することを目標としました。
用途としては、両手が空いてないような状況、具体的には車の運転や、料理をしているような状況で、音声で起動して任意の動作をさせて、作業の補助をさせることを想定したものです。
実装的には、特定の音声(「OK、Google、○○して」みたいな感じ)に反応してパラメータを渡してアプリを起動できれば良い、ぐらいに考えていました。

# Androidのアプリを音声で制御する仕組み

調べたところ、Androidで音声制御をする方法にはいくつかの手法があったので、少し整理してみました。

## Speech Recognizer

[SpeechRecognizer  \|  Android Developer

元記事を表示

AndroidとSesameとNFCで開けゴマ WEBAPI版

修正(2020/05/12):CradIDの型を指定、カードIDの等価式を修正

#目的
家の鍵を「かざす」だけで開けたい!

・Sesame
・Sesame Wifiアクセスポイント
https://jp.candyhouse.co

・NFCカード + 電波遮断シート
 玄関のドアは金属性なので、台紙にしないと反応しないので
 (100均に電波遮断シートが売ってることにびっくりした、、、
・Androidスマホ

##方法
1.AndroidでNFCを読み込み→ネット→公開APIで解錠(本記事)
![WEBAPI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602722/ba4880f1-b4b9-1b9e-9461-2d346094c79c.png)
2.AndroidでNFCを読み込み→BLEで解錠([別記事](https://qiita.com/sakujira/items/93998534d8358b387ee9))
![BLE.png](https://qiita-image-store

元記事を表示

AndroidとSesameとNFCで開けゴマ BLE版

修正(2020/05/12):CradIDの型を指定、カードIDの等価式を修正

#目的
家の鍵を「かざす」だけで開けたい!
→改良しました、、、https://qiita.com/sakujira/items/73e7438b7fe62d4f7a13

・Sesame
https://jp.candyhouse.co
・NFCカード + 電波遮断シート
 玄関のドアは金属性なので、台紙にしないと反応しないので
 (100均に電波遮断シートが売ってることにびっくりした、、、
・Androidスマホ

##考え方
色んな開け方を考える
・Felicaを機器かざしてにかざして開ける
  機器の電源が必要になる
・スマホが近くに寄ったら開ける
  1m単位で位置確認が必要
・スマホをノックして開ける
  ノックの定義を正確にするのは難しい

個人的にどれも理想的ではなくて、本当に「かざす」だけにしたい、、、

「解錠・施錠が高速化! おサイフケータイでスマートロックを操る」
https://k-tai.watch.impress.co.jp/docs/column/minna/1240577

元記事を表示

ExpandingBottomSheetをBottomSheetBehaviorでシンプルに実装する

# ExpandingBottomSheetとは
以下のように画面右下に配置されたコンポーネントがタップによって拡大し、別の画面を構成するようなBottomSheetです。
https://material.io/components/sheets-bottom#expanding-bottom-sheet
![Peek 2020-05-10 19-38.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33071/d6440be2-b784-2bd4-1c07-7c388577ace8.gif)

https://github.com/material-components/material-components-android/issues/994 で話されているようにデザインとしては用意されているものの、2020年5月現在、コンポーネントとしては提供されておらず、自前で実装する必要があります。

FlutterのサンプルであるSHRINEでも使われていますが、こちらでもコンポーネントとしては提供さ

元記事を表示

Edge-to-edgeの対応

#はじめに
Android Qから、「ジェスチャーナビゲーション」という新しい操作方法が追加されました。
従来の操作方法は、画面下部にある三つのボタンをタッチしてホーム画面に戻ったり、ひとつ前の画面に戻ったりしていました。
「ジェスチャーナビゲーション」はiOSのようにボタンではなくジェスチャーによって前の画面に戻ったりする操作方法です。

|3ボタンナビゲーション|ジェスチャーナビゲーション|
|:—:|:—:|
|||

このジェスチャーナビゲーションを利用す

元記事を表示

UnityでC++連携をする(2020年度版)

# 概要
サーバー連携をする際に送る認証用データを作ったりしたくて、そういった箇所はリコンパイルが(比較的)難しいC++側で作り込みたいなと思ったのでそのやり方をまとめます。
まずはC++の簡単なファイルを作ってのUnity連携までを記載します。

なお、連携部分は以下を大いに参考にさせていただきました。

Unity iOS/Android共用プラグイン C++ライブラリ作成
https://qiita.com/satotin/items/05fad323de3101f775d5

## 動作環境
* Mac OSX (10.15.4)
* Xcode 11.4.1
* Android Studio 3.5
* Android NDK r17b
* Crypto++ 8.2.0
* Unity 2019.3.13f1

# Unityプロジェクトの作成
とりあえず、サクっとUnityプロジェクトを作成します。こちらは割愛。

## Assetsフォルダ直下に必要なフォルダを作成

以下になるように、Assetsフォルダ内にフォルダを作成していきます。

“`
■ Assets

元記事を表示

【Mac不要】FlutterアプリにFirebase SDKを組み込んでiOSとAndroidに実機配備する手順 – Codemagic編

# はじめに

※この記事は、以下の記事の続編の一つです。

[【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 – Codemagic編](https://qiita.com/kami_teru/items/c7ed113d0ecdf7e48ff0)

この記事ではその後、FlutterにFirebase SDKを組み込み、iOS, Androidの両端末からFirebaseコンソールに疎通できるまでの手順を説明します。

Firebase SDKの組み込みを終わらせておくと、以下のようなメリットがあります。

* アプリがいつ、どこで、実行されているかの情報がFirebaseコンソールで確認できる。
* Firebase API([FlutterFire](https://firebaseopensource.com/projects/firebaseextended/flutterfire/))との連携コードの組み込みがスムーズに行える。
* 利用者のGoogleアカウントを利用するための実装(例:[Build a Photo Sharin

元記事を表示

GooglePlayでリリースできなくて詰まった件「完全にブロックされた APK」

GooglePlayでアプリのバージョンアップをしようとするとこんな警告が

“`
完全にブロックされた APK

問題:
この APK は、バージョン コードの大きい 1 つ以上の APK で完全にブロックされているため、ユーザーに配信されません。

解決策:
この APK をリリースから削除するか、このリリースに含まれている APK の対象やバージョン コードを確認してください。
“`

https://www.hirohomme.com/2019/06/03/%E5%AE%8C%E5%85%A8%E3%81%AB%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%95%E3%82%8C%E3%81%9Fapk/
によると
> バージョンコードを +2(前回 1 に対して、問題のapkは 3 )にしてしまっていて

とあり、このとき公開中のAPKはバージョン`4`で、更新は`6`だから
たしかにバージョンを2以上増やしているな〜と`5`のAPKに変更しようとしました。

しかし、よく見てみるとすでにアーティファクトライブラリに`5`がある!

元記事を表示

Androidアプリ:画面遷移の仕組みをシンプルコードで解説してみる

前回
[Androidアプリ:イベントとリスナをまとめてみる](https://qiita.com/kkhouse/items/2980cf748c415bb36f48)

の続き。。。

##はじめに

入社三か月のペーペーです。androidアプリ開発勉強中です。お勉強がてらまとめてます。

入門書レベルの知識を自分なりにかみ砕いています。端折っている部分も多々あるのでご注意を。

##今回まとめる範囲

今回は画面遷移についてシンプルコードでまとめます。
・画面遷移の基礎の基礎を知りたい。
・インテントをシンプルに理解したい。
という方向けです。

作成するのはテキストを入力して送信ボタンを押すと、画面遷移後に、入力されたテキストを表示してくれるアプリです。

####今回出てくる言葉たち

– インテント

簡単にいうとアクティビティから別アクティビティに情報を運ぶための入れ物のようなもの。
今回のように画面1のアクティビティにある文字列をインテントという箱に入れておくと、画面2でその箱を呼び出せば画面2でもその文字列を使用できる。

####前回以前の言葉たち

– イ

元記事を表示

Flutter入門サイトを作ってみた件【Flutterで始めるアプリ開発】

みなさん、こんにちは
とあるサラダ?の会社で開発やってます umatoma です。

Flutter入門用のWebサイトを1つ作ってみたので、
それに関しての記事を投稿してみようかなーと思っています。

# 目次
– Flutterで始めるアプリ開発
– なぜ作ったのか
– 今後の予定
– 最後に

# Flutterで始めるアプリ開発

### Flutter入門サイト

作ってみたFlutter入門用のWebサイトがこちら?です。

**Flutterで始めるアプリ開発**
*Flutterを使ったiOS/Android/Webアプリ開発への入門に必要な情報を分かりやすく紹介*
https://www.flutter-study.dev/
![banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632977/a3a10e00-baf5-9a1a-2250-134f5f7e7f8d.png)

### 想定しているターゲット層

– アプリを作ってみたいけど、どうやって作るか分からない方

元記事を表示

FirestoreのデータをRecyclerViewで表示する[Java]

Firestoreのデータが更新されるたびにRecyclerViewの表示も更新されるようなことをやりたかったのですが、日本語で書かれた記事が全然なくて苦戦しました。

この記事では[FirebaseUI for Cloud Firestore](https://github.com/firebase/FirebaseUI-Android/tree/master/firestore#using-the-firestorepagingadapter)を参考に**FirestoreRecyclerAdapter**を使ってチャットアプリを作ってみます。

Firestoreでのデータベース作成がまだの人は[Cloud Firestore を使ってみる](https://firebase.google.com/docs/firestore/quickstart?hl=ja)を参照してみてください。

#表示するデータのモデル
チャットアプリをイメージしてください。

“`java:Chat.java
public class Chat {
private String mNa

元記事を表示

【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 – Codemagic編

# はじめに

Flutterはクロスプラットフォーム対応ですので、作成したアプリはiOS, Android両方にリリースすることができます。ところが、WindowsではiOS向けのビルドができません。Macを持っていない人にはつらい事実ですね。そこで、この記事ではCodemagicというサービスを利用してiOS, Android両方にリリースする手順を紹介します。

## 前提

この記事は、以下に当てはまる人向けの iOS/Android 対応アプリを開発する手順を紹介します。

* 開発機はWindowsだ
* **Macを持っていない**
* Flutterで開発したい
* Apple Developer Programに既に登録している、または年間で約12,000円を支払えるクレジットカードまたはデビットカードを持っていて、支払い後に最大48時間待ってやるのも悪くない。※1

※1: 2020/03/25現在。

## 開発環境の前提

* AndroidStudioがインストールされていること(まだの方は、インストールをお願いします)
* Git for windowsが

元記事を表示

[Ubuntu]Android Studio をインストールしショートカットを作成する

最近、Android アプリケーションの開発環境を Ubuntu (Linux Desktop) に移行を試みています。Android Studio のインストール自体は簡単でうまく行くのですが、ショートカットの作成に手間取ったのでまとめたいと思います。

# インストールする

Android Studio のインストールは簡単で Android Studio をダウンロードし任意の場所に展開するだけです。今回は Android Studio を /opt に展開してインストールします。

1. [Android Studio](https://developer.android.com/studio) をダウンロードする
2. ターミナルを開く
3. ダウンロードしたファイルを tar コマンドで /opt に展開する。

“`
$ cd /opt
$ tar -zxvf ~/Downloads/android-studio-ide-192.6392135-linux.tar.gz /Desktop
“`

[![Image from Gyazo](https://i.gyaz

元記事を表示

[Android]ダブルクォーテーションを画面に表示する

# はじめに
strings.xmlで定義したダブルクォーテーション(二重引用符)したい場合、「`\”`」を使います。
ただ、WPFの文字列リソースだと`%quot;`で表示されるのに…となったため簡単にまとめてみます。

# 比べてみる
`”`を含む文字列をTextViewに指定してみます。
「xmlにべた書きする」「strings.xmlの文字列を指定する」「Activityから文字列を指定する」の3つで比べてみました。

## xmlにべた書きする
“`xml:activity_main.xml

“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/8d3eba4a-8f15-7c07-8cfa-6fbc78cb5db4.png)
xmlでべた書きすると、`\`は効かないため特殊文字である`%quot;`と書かなければ

元記事を表示

OpenAPIでお手軽にモックAPIサーバーを動かす

OpenAPIというものを教えてもらったので、ちょっと~~遊んで~~試してみました。

# 目標
APIをOpenAPIで定義し、コードをジェネレートしてAPIのレスポンスが得られる。
なので、使うのは[OpenAPI Specification](https://swagger.io/specification/)と[OpenAPI generator](https://openapi-generator.tech/)になります。

# 環境など

|ツールなど|バージョンなど|
|:–|:–|
| MacbookPro |macOS Mojave 10.14.5|
|Android Studio |3.6.1|
|Java |1.8.0_131|
|Postman|7.19.1|

# OpenAPIでAPIを定義する

## 1.APIの設計

APIの設計をzeroからやったことがないので流儀がよくわからないですが、以下のようなRESTfulAPIを考えます。

とあるログデータ型`LogData`があるとして、データは何かしらのDBに入っていると仮定します。プライマリキー

元記事を表示

OTHERカテゴリの最新記事