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

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

遅延評価lateinit・lazyの違い

#はじめに
遅延評価とは、必要な時まで値を代入したり計算したりを無視することをさします。
そのため、使用しない場合は計算を無視することで、処理コストを減らすことができます。
今回は、遅延評価として使用されるlateinitとlazyの違い等の紹介したいと思います。

##lateinitとlazyの違い
まず、それぞれの宣言はこちらになります。

“`kotlin

//lateinit
private lateinit var testButton: Button
private lateinit var 変数名 : 型

//lazy
private val testNumber by lazy { intent.getIntExtra(“Int”, 0) }
private val 変数名 by lazy { 代入したいもの }
“`

lateinitの特徴として、
・プリミティブ型は宣言できない。
・varで宣言。
・値の変更可能。
・初期値を与えず変数を使用すると、エラーが発生します。
・nullableは使用できない。

lazyの特徴として、

元記事を表示

Androidタブレット(HWT31)を子供用Kindle専用端末にする

#背景

以前よりKindleで購入した本は家族内で読みまわしたいと思っていた。紙は好きだが、狭い日本の家でスペース取る。読書権の永続性が担保されてるわけではないが、ITジャイアントのモラルを信じて数年前からKindleに集約している。何なら紙で買って、処分したのち、電子で買い直すことすらした。コンテンツ産業よ光あれ。

[話を戻そう](https://www.google.com/search?q=%E6%99%82%E3%82%92%E6%88%BB%E3%81%9D%E3%81%86+%E3%81%BA%E3%81%93%E3%81%B1)。
子供らYouTubeめっちゃ見るのよね。ほっとくと1日中。ほんま良くない。全てが悪とは言わないが低俗なものにハマっている印象だ。最初に渡したのが良くなかった。せめて[Youtube Kids](https://youtube.com/kids/)にしておくんだったが、後からの移行は不可能であった。見れなくなるチャンネルばかりでブーイングの嵐であったためだ。仕方なく時間制限を設ける運用に至っている。

Kindleで買った漫画を読ませるために

元記事を表示

AndroidでFirebaseを使ったログインの際にINVALID_CERT_HASHが起きる場合の対処法

Google Playアプリ署名が有効になっていると、自分のアプリ署名が削除され、アプリリリース後にGoogle Playが付与したアプリ署名が使われる。

スクリーンショット 2020-02-11 19.14.48.png

そのため、Firebaseログインを利用する場合、自分が署名した際のSHA-1フィンガープリントではなく、Google Playが署名した際のSHA-1フィンガープリントをFirebaseの設定で登録する必要がある。

スクリーンショット 2020-02-11 19.12.54.pngSnackbar使用時に ScrollView can host only one direct child とエラーが起きる場合の対処

## 問題概要
この記事にたどり着いた人はScrollViewにaddViewした覚えがないのに
`ScrollView can host only one direct child ` のエラーに悩まされている人かと思います。

その場合、
Snackbarの[make](https://developer.android.com/reference/android/support/design/widget/Snackbar.html#make(android.view.View,%20java.lang.CharSequence,%20int))の第一引数に渡しているviewが、ScrollViewになっていないか確認してください。

ScrollViewになっていれば、原因はそれの可能性が高いです。

## 原因

MateralComponentの1.1.0-alpha-06までのSnackbarの実装を見てみると、

“`java
@NonNull
public static Snackbar make(
@NonNull View view, @Non

元記事を表示

Introduction of Data Binding in Android

本稿ではData bindingの実装手順を備忘録として残しておきます。

SeekBarとViewModel、TextViewを結びつけて、SeekBarの変化を画面表示に反映する機能を実装します。

使用する主な道具としては、`SeekBar`・`Data Binding`・`LiveData`になります。

[Githubに実装がおいてあります。](https://github.com/sahara-ooga/android-data-binding-sample)説明上コードを適宜省略していますので、詳しくはこちらのレポジトリを参照してください。また、説明と対応するコミットへのリンクを掲載していますので、実装を追記する位置はこちらを参照してください。

## 環境

macOS 10.15.3

Android Studio 3.5.1

Kotlin plugin 1.3.61-release-Studio3.5-1

## 実装手順

以降、package名を example.android.android_data_binding_sampleとして進めます。

###

元記事を表示

Flutter プラットフォーム固有機能を利用するためのSystemChannels APIについて

# はじめに

Flutterからプラットフォーム固有の機能を利用するためのAPIの[SystemChannels](https://api.flutter.dev/flutter/services/SystemChannels-class.html)について解説します。

## SystemChannelsとは

まず最初に、基本的にこのAPIを使うことは推奨しません。Flutter Framework内部ではこのAPIを多用していますが、以下のように中間レイヤのAPIであるため今後のバージョンアップで変わる可能性が高いです。

SystemChannelsの[ソースコード](https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/services/system_channels.dart)を見ると、中身はMethodChannel, EventChannel等を利用していることが分かると思います。MethodChannelやEventChanne

元記事を表示

Kotlin, LiveData, coroutine なんかを使って初めてのAndroidアプリを作る(8)

[前回](https://qiita.com/kasa_le/items/e372c9e18b60f4b2f430)の続きです。

# 今回の目標

リストの表示を1ヶ月1ページにします。
そしていわゆる`ViewPager`を使い、左右にスワイプすることで月を移動できるようにします。

※カレンダー風の表示は、また次回に回します。

ViewPagerは、Androidでは使えないとお話にならない機能だと思うので、是非覚えて下さい。

# 1ヶ月1ページにする

## (1) レイアウトの変更

今表示してる「年月」を表示する部分を追加します。
完成イメージはこんな感じです。

![qiita08_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/00eaa98f-2fce-f1fd-871a-932794b1673a.png)

レイアウトxmlのサンプルはこちら

“`activity_main.xml

元記事を表示

Unity 2019.3 でJDK、NDK、SDKが無いエラーが出る場合の対応方法

Unity でAndroid開発、あるいはOculus開発しようとしたら、 `UnityException: JDK not found` が出ましたか?
自分は同じミスを二度ほどして学びました。

# エラー内容
“`
UnityException: JDK not found
Java Development Kit (JDK) directory is not set or invalid. Please, fix it in Preferences -> External Tools
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/builduser/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:187)
“`

Preferences を見ると、JDK周りに警告が出ている。
スクリーンショット 2020-02-11 1.15.17.png今からスマホアプリの学習をしようとしてる人に向けて!

##1. はじめに
私は新卒でITベンチャーに入社して、現在スマホアプリのフロントエンドエンジニア(※以下 アプリのフロント)として、
Android、iOS共に、主にECアプリなどを開発しております。
そんな私がスマホアプリの学習をしようか検討中の方に向けて、「**アプリのフロントはこんな感じ**」というのを共有させていただければと思い記事にしました。

##2. スマホ開発の仕事はある?
学習するか悩んでる言語がある方の多くは、「その言語を学んでも仕事が無いんじゃ意味がない」と思っている方だと思います。
確かに「仕事がない」=「必要とされていない」と言っていいと思うので、これから学習する言語は仕事が多く取れる言語が良いですよね。
その点、**スマホのエンジニアは仕事がある**と私は胸を張って言えます。
これは「勤めている会社の中で仕事があるから」「自分がやっているから」というだけが理由ではありません。
私は趣味で英語の勉強会に行くのですが、その際職業の話になりアプリを作っていることを話すと、
結構な確率で「こういうサービスを考えているんだけど…」と相談されます。
今、何かサービスを

元記事を表示

Flutter MessageChannel APIの使い方

# はじめに

Flutter (Dart) とプラットフォーム (Android/iOSなど) 間の通信/呼び出しAPIについてまとめています。

* [MethodChannel](https://qiita.com/kurun_pan/items/db6c8fa94bbfb5c0c8d7)
* [EventChannel](https://qiita.com/kurun_pan/items/6d63ebf1e894d3620b20)
* MessageChannel ← 今回

## 1. MessageChannelとは

プラットフォーム (Android/iOSなど) とFlutter (Dart) 間で双方向でメッセージ送受信するためのAPIであるMessageChannel (正確には[BasicMessageChannel](https://api.flutter.dev/flutter/services/BasicMessageChannel-class.html)) です。片方からもう片方にデータを送信し、受信したらリプライを返すというごく普通のメッセージパッシン

元記事を表示

Uno Platform 入門 2 : 環境構築をしよう! Uno Platform ハローワールド

いよいよ **Uno Platform** の開発環境を整えてみましょう。 **Uno Platform** はクロスプラットフォーム開発環境なので、それぞれの環境で動くように、多少揃える必要のある環境があります。
この記事では、ちゃんとそれぞれが動くか一歩一歩動作確認しながら進めていきます。

この記事のゴール:

1. **Xamarin.Forms** ハローワールド (環境構築 && 実行)
3. **ASP.NET Core** ハローワールド (環境構築 && 実行)
2. **Uno Platform** ハローワールド (環境構築 && 実行)

参考記事:

* 前回の記事:『[Uno Platform 入門 1 : Uno Platform とは? ~ C# で iOS, Android, Web, Windows 10 アプリを一気にクロスプラットフォーム開発~](https://qiita.com/chomado/items/9a36d5e1bb41c4f6cef3)』
* (英語) 『[Using Uno – getting started / Sett

元記事を表示

UnityでMicrosoft Cognitive Speech Servicesによる音声認識をAndroidスマホで実装する

Androidスマホで動作するUnityの3Dアプリに音声認識をさせる必要が生じたので、簡単なサンプルを作るところから始めました。音声認識には「Microsoft Cognitive Speech Services」を使うことにしました。ちょっとハマったので、備忘録も兼ねて書いておきます。
#開発環境
Windows 10
Unity Ver 2019.2.17f1
Android 9.0 (Galaxy Note9)

#(1)Microsoft Cognitive Speech Servicesの準備
##Microsoft Azure の無料アカウントを作成
まず、Microsoft Azure の無料アカウントを作ります。ちょっと古いけど、この辺が参考になると思います。
「[Microsoft Azure の無料アカウントを作ってみた](
https://qiita.com/shinyay/items/a6106936b4a640ab0dc4)」

## Cognitive Servicesのプロジェクトを作る
「[Azure Cognitive ServicesのSpeech

元記事を表示

51歳から(現52)のプログラミング 備忘 Support Library API追加

#Support Library APIの追加
ネイティブのActionBarはAPIレベル21以降。Support Library の Toolbar ならAPIレベル7以降をサポートできる。

Projectのbuild.gradleファイル内にGoogle Mavenリポジトリを組み込む

“`java:
allprojects{
repositories{
google()
// もし、gradle versionが4.1以下なら、代わりに以下を使う
// maven{
// url ‘https://maven.google.com’
// }
}}
“`
次に、サポートライブラリを使用するモジュールごとに、build.gradle内のdependenciesブロックにライブラリ(v4 core-utils)を追加

“`java:build.gradle
dependencies{

implementation “com.android.support:support-core-ut

元記事を表示

[Android Studio] アプリの全画面表示についてまとめてみる(ノッチ有り無し)

# はじめに
アプリの全画面表示をしようとするとノッチの有り無しでやり方がちょっと違ったのでまとめてみます。

# 開発環境
Android Studio 3.5.3

# フルスクリーン表示の方法
これは、ノッチ有り無しに関わらず同じです
`styles.xml`にて、以下を記述します

“`xml:styles.xml

“`

次に`AndroidManifest.xml`でthemeを設定すればOKです

“`xml:

元記事を表示

Flutter EventChannel APIの使い方

# はじめに

Flutter (Dart) とプラットフォーム (Android/iOSなど) 間の通信/呼び出しAPIについてまとめています。

* [MethodChannel](https://qiita.com/kurun_pan/items/db6c8fa94bbfb5c0c8d7)
* EventChannel ← 今回
* [MessageChannel](https://qiita.com/kurun_pan/items/9c2b6fdba602203f8f83)

## 1. EventChannelとは

プラットフォーム側からFlutter (Dart) 側にイベント通知するためのAPIの一つである[EventChannel](https://api.flutter.dev/flutter/services/EventChannel/EventChannel.html)について解説します。

加速度センサーの値の変化やプラットフォーム側のイベントサイクルの変化など、プラットフォーム側で定期的もしくは突発的に発生するイベントをFlutter側に通知するためのAPI

元記事を表示

adventcalender ARCoreを触って、サンプルを作ってみる 12/11分として記載

2020/02/08 記事の構成を記載

こんにちは、コロナです。

今回は、ARの学習をしたくてARCoreのサンプルを作成しようのコーナーです。

# ARCoreって何?

UnityがAndroid向けにゲームを拡張するために用意してくれたSDKになります。
Unity側の紹介ページ
[https://unity3d\.com/jp/partners/google/arcore](https://qiita.com/drafts/398b3fe6785a146975f1/edit)

# issueこれからの課題
google側に記載されているSDKの消化をしていく
https://developers.google.com/ar/develop/unity/quickstart-android

## SDKの取り込んで成功した時のスクショ

## サンプルシーンを取り込んでの動作確認とスクショ

## プロジェクトの設定について、確認と必要であれば設定

## Android環境として実際にビルドをする

ありがとうございました

元記事を表示

android.os.HandlerのpostとpostDelayedを使った際のQueueに積まれる順番について

AndroidでHandlerの`post(Runnable r)`を複数回コールした場合は、postした順にQueueに積まれて、実行されます。`post(Runnable r)`と`postDelayed(Runnable r, long delayMillis)`を使った場合にどうQueueに積まれるか調べてみました。

ソースコードを見ると、postとpostDelayedの内部では共に`sendMessageDelayed(Message msg, long delayMillis)`が呼ばれていました。

“`java:Handler.java
public final boolean post(@NonNull Runnable r) {
return sendMessageDelayed(getPostMessage(r), 0);
}

public final boolean postDelayed(@NonNull Runnable r, long delayMillis) {
return sendMes

元記事を表示

React Nativeでスマートフォンのカレンダーのデータを取得

# 調査内容
Android/iOS共にNativeコードではスマートフォンのカレンダーデータにアクセスする事ができますが、React Nativeでアクセスする方法について調査しました。今回はAndroidでのみ動作確認を行いましたが、iOSでも動作可能と思われます。
スクリーンショット 2020-02-08 17.40.18.png

# 設定手順
以下のモジュールを利用します。
https://github.com/wmcmahan/react-native-calendar-events

“`
$ npm install –save react-native-calendar-events
$ react-native link
“`

今回はAndroidで動作確認をしますので、AndroidのNa

元記事を表示

AndroidでBluetooth関係のAPIを使ってPAPERANGに接続してみる

# はじめに

正月に秋葉原行ってじゃんぱらでPAPERANGを購入。
で、PAPERANGのAPIないかなと探したけど、Cordovaのプラグインしか見つからなかったので、プラグインのソースをAndroidStudioで普通にアプリに使えないか試してみる。
もし、もっと良い方法を知ってる方がいたらコメントください。

うまく使えたら、Androidの会で何か作るときや、ハッカソンなんかで使ってみたい。

CordovaのPAPERANG pluginを見つけて、その中のjarを使ってできないか試したが、なんか、メーカーからIDとかもらわないとできそうもないのであきらめ、別の方法を模索。
Androidの会 浜松支部の定例会で、話をしていたところ、よさげなページを見つたので、そこを参考に紙送りができるところまで確認できた。

良さげなページは以下のサイト
[M5StickC(ESP32)からBluetooth小型ポータブルレシートプリンタ「PAPERANG」を制御する](https://lang-ship.com/blog/?p=1318)
[Bluetooth小型ポータブルレシートプ

元記事を表示

Flutter MethodChannel APIの使い方

# はじめに

FlutterはクロスプラットフォームなUIフレームワークです。UI特化のため、UI作る以外のプラットフォーム固有の機能を利用する場合には、公開されているライブラリ (プラグイン) を利用する以外にはFlutterの専用APIを利用してプラットフォーム側の実装を行う必要があります。

プラットフォーム固有機能の例は以下です。

* Audio/Videoなどのメディアのデコード, エンコード, 再生
* ランタイムパーミッションの表示や設定確認
* Bluetoothや加速度センサーなどのハードウェア機能
* WebView
* ストレージやファイルアクセス

Dart⇆プラットフォーム双方向でまとまった情報が無かったため、ここにまとめることにしました。
今回はいくつかあるAPIのうち、最もよく使う[MethodChannel](https://api.flutter.dev/flutter/services/MethodChannel-class.html)について使い方を解説します。

## 関連記事

Flutter (Dart) とプラットフォーム (Andro

元記事を表示

OTHERカテゴリの最新記事