20200602のAndroidに関する記事は8件です。

【Amazon Alexa】ウチのスマートホーム環境を晒す。【全力で横着しよう!】

全力で横着しよう!

  • 忙しい時ほどリモコンが見つからない
  • 寝ているときに照明を消したい
  • 真夏、真冬に家に入った瞬間が不快
  • ジム帰りにお風呂が沸いていて欲しい
  • 朝急いでいて自動掃除機動かし忘れた
  • smart home化に興味はあるが、難しそう
  • 灯りがついていない家がさみしい

そんなことを考えたことがある人にオススメする「スマートホーム化」の記事です

知り合いから「音声で家電操作ってどうやってるの?」と聞かれることがあるのでご紹介。

環境の紹介

・androidのスマホ(iOSで対応のアプリがあるか未確認です)
・tp-linkのwi-fi無線LANルーター
・amazon prime会員である
Echo Dot(べつにdotでなくともEchoでもEcho plusでもOK)
TECKIN スマートプラグ
SwitchBot Hub Plus
SwitchBot
Nature Remo mini

関係性イメージ図

image.png

この図について、
・1-赤外線リモコンの自動化
・2-リモコンの無い家電の自動化
・3-スイッチの自動化
・4-全体を音声で操作する方法
の4つを紹介していきます

セットアップ方法などは購入するとパッケージに書いてあるので割愛して、どんな手順が必要なのかザックリと共有します。

1-赤外線リモコンの自動化

  • エアコン・TV・自動掃除機・扇風機、などなど赤外線リモコンを使用する家電について自動化していく
    • この操作にはNature remoを使用
    • nature remoの専用アプリをストアからダウンロード。
    • アプリを通してnature remoにwi-fiのIDやpassを入力。
    • つなぎ終わったらアプリで「家電を追加」からリモコンの赤外線をnature remoに向けて教え込む。

これだけでアプリからリモコン操作ができるようになります。

リモコンを探す必要もないし、電池を入れ替える必要もなくなります。

実はswitchBot Hubでもできます。アプリからHubPlusを選択してリモコンを学習させるだけです。
特にnature remoにこだわりがなく、今後スイッチボットを買う予定ならnature remoを買う必要は無いです。
(私がnature remoを使っているのは、switchBot Hubからの指示が操作したい機器に届かないほど遠い位置にあるのでNature remoを機器の近くに置いているだけです。)

2-リモコンの無い家電の自動化

この扇風機ボタン式なんだけど・・・
スリープモードでなく、PCモニターを元電源から落としたい・・・
そんな操作にはTECKINのスマートプラグを使っています。

  • 使い方は簡単でコンセントと家電の間に挟むだけ
    • 蛸足コンセントの根本に挟めばいくらでも一斉に着けたり消したりできます
    • smart lifeのアプリとスマートプラグを連携させるだけ
    • アプリ画面からON,OFFできるようになります

3-スイッチの自動化

コンセントもリモコンもない、押しボタンなんだけど・・・
お風呂のスイッチとか。
付属の粘着シールとワイヤを使えば様々なタイプのスイッチを「押したり・引いたり・引っ張ったり」できます。

  • スイッチボットの電池を入れてアプリから検出するだけ

ホントそれだけ。
hubがないとスイッチが動かないので注意です
(スイッチだけ買って悩むとかアホなことしないように。)

4-全体を音声で操作する方法

echoとスマホの接続は終わっている前提で。

アプリ側に「トリガー」や「タイマー」などの機能があり自動化できます。
スマホのアプリからボタンをいちいち押すのもめんどくさいです。
ここでは音声を使った操作を紹介します。

alexaアプリの「スキル」から「smartlife,スイッチボット,nature remo smart homeスキル」を検索して有効にします。
その後、「デバイスを追加」で「その他」からデバイスを検出する。
つながっているプラグやスイッチが検出される(はず)
アプリ側でスイッチを識別したときに名前を付けていたら、そのまま認識されるかも。

音声操作のオススメは、このalexaアプリの「デバイス」のタブから「グループの追加」という項目があるので、ある程度echoが聞き取ってくれる言葉でグループに名前を付ける。
操作したい名前をグループ名として登録すること(照明とかモニターとか換気とか)。
一応各スイッチアプリ側で名前を付けてalexaに認識させたら、その名前で音声操作することもできますが、

  • 後から一括で同時操作したくなったり
  • スイッチを移動させてお風呂って名前なのに扇風機に使ってたり

ということが発生するので、すぐに消して割り振りなおすことができるalexaアプリ側のグループ名で操作するのがオススメ

alexa側で音声認識APIを使ってアプリに指示を出してくれます。
deep learningってやっぱスゲー

付録:スマホで音声操作

androidではホームボタン長押しでgoogleアシスタントが起動するのですが、alexaに変更することもできます。
アプリからボタンを押してもいいですが、ホームボタン長押しでalexaを起動してスマホに話しかけるだけでechoが無い外出先でも音声操作ができます。

スタバに居ながらもドヤ顔で家の家電操作ができてしまうのです!!
え?外で音声操作するの恥ずかしいからアプリ起動するほうがマシ?

以上

かなり簡単に紹介しましたが、そんなもんで自動操作ってできちゃいます。
ハードル感じている人がいたらその助けになったら幸いです。
一番のハードルはスイッチ達の金額かも・・・揃えだしたらお金もバンバン出ていきます

皆さんの環境なんかも、よかったら教えてください。

アナログドアを自動で開施錠してくれるデバイスもあるようですが、知り合いが誤作動に悩まされていたのでやってないです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Spek FrameworkをアップデートしたらTestができなくなった

Spek Frameworkをアップデートしたらエラーが出て、困ったので、その対処を残します。

エラー内容(Spek Framework 2.0.11-IJ2019.2)

バージョンを上げたら以下のようなエラーがでた(以前のバーションだと出なかった)

io/mockk/proxy/MockKAgentFactory
java.lang.NoClassDefFoundError: io/mockk/proxy/MockKAgentFactory
...

java.lang.NoClassDefFoundError: Could not initialize class io.mockk.impl.JvmMockKGateway
...

対処

根本的な問題の解決にはなっていないが、一時的な対処として以前のバージョンに戻してみた。

Step1

事前に、Android StudioからSpek FrameworkをUninstallしてください。
まず、Spek Frameworkのページにて、赤丸のバージョンをダウンロードしてください。

Step2

Android StudioのPreferencesのPluginを開き、歯車アイコンをクリックして、Install Plugin from Diskを選択する。
そして、Step1でダウンロードしたZipファイルを選択します。
image.png

Step3

Step2を行うと、Pluginに以下のように表示されるので、インストールしてください。
image.png

おわりに

なぜエラーが出るのかはわかっていません。
個人的に調べてますが、どなたか知っていたら教えて下さい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

電子機器類がオンライン授業に対応しているか否か分類出来るかメモ

最近オンライン授業に使われているサービスを、少し書き並べてみます。

  • HTML5ブラウザを前提としたWebサービス
    • WebブラウザベースのLMS (moodleとか)
    • Web会議システム (zoom, WebExとか)
    • G Suite, MS Office365 のWebブラウザベースのもの
  • G Suite for Education Apps
    • Google Classroom
    • Hangouts Meet
    • Youtube ?
  • Microsoft Office365 Apps
    • Word, Excel, Powerpoint
    • Teams ほか
  • (サービスに紐づいた様々な)アプリ
    • zoom
    • Cisco WebEx
    • ほか

で、ご家庭でお持ちのハードウェアは何種類かに分かれ、このサービスが必ずしも満足に動作するとは限らないわけです。ちょっと分類してみます。

PC系 PC(Windows) PC(macOS) PC(ChromeOS) PC(Linux系)
代表的な機器 ノートPCなど MacBook など Chromebook など 自作PC, 仮想PCなど
chrome ブラウザ
firefox ブラウザ ×
その他ブラウザ ◎edge, IE ◎Safari 多様
G Suite 系アプリ chrome依存 chrome依存 OS標準 chrome依存
Office系アプリ(Word, Excel, PowerPoint) ×
Office系アプリ(三種以外)
その他アプリ

標準のWebブラウザに◎をつけてあります。ChromeOSの△の部分は、Google Play に対応していない、何らかの理由で対応出来ない場合は×になるという認識です。

ネイティブアプリの有無でサービスの利用感は大きく変わります。例えば、Chromebook で Webベースの Microsoft Teams を使うと、ビデオ会議などにうまく参加出来なかった経験があります。

また、Linux系のアプリ類はWin/Mac系とは文化が異なるので、必ずしも同じアプリが用意されているとは限りません。

スマホやタブレット等 Android 系(Google Play対応) Android 系(Google Play非対応) iOS系
代表的な機器 国内のスマホなど kindle Fire, HUAWEIの最新機器など iPhone, iPadなど
chrome ブラウザ ×
firefox ブラウザ ×
その他ブラウザ 多様 ◎機器依存 ◎Safari
G Suite 系アプリ ×
Office系アプリ(Word, Excel, PowerPoint)
Office系アプリ(三種以外) ×
その他アプリ

スマホ・タブレット、で一緒くたにしてしまいがちなのですが、まずchromeブラウザか否か、というだけで前提がだいぶ変わります。chromeで起こらなかった現象がsafariで起こるなんてことはよくあります。スマホに導入すべきWebブラウザを指定したほうが良いと思いました。

また、Google Playに対応していない Android 系デバイス には注意が必要です。個人的に kindle fire 系とHUAWEI(AppGallaryのみ対応)系が今後ますます罠になりそうで怖いです。Webブラウザからしてね……違うんですよ……。せめて AppGallary に mozilla firefox が登場してくれればなあと思うところです。(Amazonアプリストアにあるfirefoxは限定的すぎるので見なかったことにしました。)

kindle fire は Amazon のサービス専用だと思います。あれはゲーム機のようなものです。

というわけで、「PCありますか」「スマホとかタブレットとかありますか」で雑に調査すると、後で思わぬ罠を踏みそうなので、個人的に整理したメモでした。

特に、Google Classroom や Microsoft Teams など、一つのサービスに完全に依存してしまうのは、管理は楽ですがハードウェアには制限がかかる、と思った方がいいかもしれません。サービスによっては留学生がアクセス出来ないものもあります。

多様性の担保はサポートの辛さとセットなのかもしれません。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Androidで確実にアプリ評価をあげる方法

これ実行したらどこかの誰かに怒られそうなので、コード、スクショ等一切のせません。

Androidの場合評価ダイアログというものが存在しないのはみなさんご存知だと思います。
IOSだと星を選択して評価を送信するダイアログがあります。

もし、作成したい場合自作するしかないのですが、IOSみたく星を選択することは不可能でPlayStoreに飛ばすしか手段がありません。その代わり項目等も自作するしかありません。

その代わり項目等も自作するしかありません。

はい。お気づきの方はその通り。
星5つの場合だけ評価させる方法があります。
それはダイアログのボタンを3つ用意し、

・星5の場合はレビューお願いします。
・問題がある場合はお問い合わせへ
・あとで見る

のようにしてしまえば良いのです。
問題がある場合にはお問い合わせにいくし、星5ならレビューを書いてくれます。

ただこれを行い審査が通るかどうかは不明です。
評価の不正コントロールと取られても無理ない内容だと思うのであまりおすすめはしないです。

やるというなら自己責任で

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Androidの実機テストで、AdMobの広告が表示されない

事象

AdMobを利用していて、Googleの用意するテスト用の広告ユニットIDでビルドすると表示される。
なのに本番用では表示されない…

I/Ads: Ad failed to load : 3
(中略)
I/Ads: Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("XXXXXXXXX") to get test ads on this device.

といったエラーがでる…

解決方法

エラーメッセージにある通りですが、

RequestConfiguration.Builder().setTestDeviceIds

をアプリコード中に記述します。
というか、AdMobのドキュメントにも書いてあります……
https://developers.google.com/admob/android/test-ads?hl=ja#add_your_test_device

どこにこのコードを書くべきか?というところですが、広告表示前に一度呼び出されれば良いようなので、メインのビューに書いておけばよいかと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Android の Gradle の感覚を掴むためのざっくりとした説明

前略: Gradleは奥が深くできることが多いがなるべくシンプルに説明したい

GradleはAndroidアプリ開発には必須なスキルですが、環境設定系の内容なので役割として触れる人が限られてしまうことが多いのではないかと思います。
そんなGradleに対して、なんとなくストレスを減らし、なんとなく感覚を掴む、チーム内での最低限の共通認識にする、などに役立てたらとと思ってます。
なるべく短く簡潔を心がけますm(_ _)m

Gradle is

  • オープンソースのビルドシステムです。 例えばJavaプロジェクトではjarファイルを、JavaのWebアプリならwarファイルを作ってくれたり、汎用性の高さからさまざまなプラットフォームで使われています。 ビルドはすべてプラグインで行うようになっていて、JavaをビルドしてJarファイルを作りたいなら build.gradle ファイルに以下を定義して gradle を実行します。 groovy apply plugin: 'java'
  • ローカル上やネットワークリポジトリ上にあるライブラリとの依存関係の解決ができます。
  • 中身はGroovyで書かれています。(最近では kotlin DSL でも書けます。)GroovyはJavaと親和性が高いのでJava育ちにはとっつきやすいです。とはいえ、言語自体は最近の言語に似てるので、そもそもそんなにとっつきにくくないと思います。
  • antやMavenなどのビルドシステムとの違いはXMLにビルド手順を記載しますが、Gradleはスクリプト言語でビルドスクリプトを書きます。

モジュールのビルドの仕組みざっくり

例えば以下のように3つのモジュールを読むパターンです。以下のように流れていきます。

root/
    |- build.gradle // 1番目. ここが動きます。
    |- settings.gradle // 2番目. ここで include メソッドで include ':module3', ':module1', ':module2' と書くと、以下の順番で build.gradle が読み込まれ、各 build.gradle でモジュールの依存関係を設定する事ができます。このファイルはPJ全体で1つだけ。
    |- module1/
    |   |- src/...
    |   `- build.gradle  // 4番目. ここが動きます。
    |- module2/
    |   |- src/...
    |   `- build.gradle // 5番目. ここが動きます。
    `- module3/
        |- module3.aar
        `- build.gradle // 3番目. ここが動きます。

シンプルなAndroidプロジェクトを例にすると以下のようになります。

root/
    |- build.gradle // 1番目. ここが動きます。
    |- settings.gradle // 2番目. ここで include メソッドで include ':app' と書いてあり、以下の順番で build.gradle が読み込まれ、各 build.gradle でモジュールの依存関係を設定する事ができます。
    `- app/
        |- src/...
        `- build.gradle  // 3番目. ここが動きます。

依存関係解決の仕組み、ちょっぴりマニアックだけど結構大事な話

マルチモジュールにするにあたって依存関係の設定は注意が必要です。
依存関係の解決には dependencies 内で implementation , api , compile を使いますが、 compile は使わないようにします。

apply plugin: 'java' // implementation , compile のため
apply plugin: 'java-library' // api のため

dependencies { // dependencies の中に依存関係の設定を書く
    // ここに implementation , compile , api の3つで定義できる。
    implementation project(':module2') // 基本的にはこれを使うと良いです。これを使えば別モジュールにこのモジュールのAPIとして提供しないようにするために implementation として定義する。javaプラグインで使える。
    api 'リポジトリのアーティファクトIDとバージョンなど' // 意図的に別モジュールにも、このモジュール側としてAPI提供したい場合は、明示的に api で定義する。java-libraryプラグインで使える。
    compile 'リポジトリのアーティファクトIDとバージョンなど' // 今は非推奨なので使わないようにしてください。api 同様、このモジュール側のAPIとして提供しますが、apiと違って意図しない公開を意味します。
}

ソフトウェアのソフトたる所以はシンプルな依存性も大事ですので、無駄に依存性の原因になるものを公開するのは避けたほうが良いです。
悪い例として、String系のユーティリティがBから公開されており、Aの中でそれを使い、あるときBが不要になったから削除しようと思ったら、Bのメイン機能以外に想定外のStringユーティリティ系のものまで依存しており、多くのモジュールに修正が必要になってしまう場合です。
これ以上話すと、コンポーネント設計の話になって Gradle から脱線しそうになるので、ここまでとします。

AndroidがGradleビルドになる前

AndroidがGradleビルドになる前は eclipse を使っていました。

  1. 主に eclipse を使ってた。eclipseのAndroid開発プラグインを使って。
  2. Android Studio を Google が正式リリースされ、開発IDEとしてもこれを使っていき、eclipseのプラグインはサポートしないようにすると明言。 Android Studio は IntelliJ IDEA の派生 IDE です。Gradleの汎用性の高さのためか、もともと IntellJ がGradleプロジェクト に対応していたこともその理由か?(ちなみにeclipseもGradleのプラグインを入れればできる) ともあれ、Android Studio では Gradleビルドをベースにしており、今はGradleがAndroidビルドのスタンダードです。。

Androidにおけるgradleビルドは何ができるようになったのか?

どんなことができるかというと、スクリプトを書けるのでぶっちゃけたところ、かなりいろいろできますが、代表的なところで言うと

  • なんと!AndroidManifestを始め、静的に定義していたアプリバージョンやパッケージ名などをビルドパターンによって動的に定義できるようになった
  • なんと!証明書ファイルもビルドパターンによって動的に定義できるようになった
  • なんと!環境毎にソースセットを分けることが簡単にできるようになった(何を入れて何を除外するなども)
  • なんと!出来上がるapkファイル名を編集できる
  • なんと!ビルド前後に行いたいこともできるようになりました。(たとえばできあがったapkファイルをどこかのサーバーにアップするとか)

など。
ant でもできましたが、冒頭に書いたように xml ではなく groovy でできるようになったということです。
所感ですが、設定に関連するコードの量もだいぶ減って簡単にできるようになった気がします。

Androidのプロジェクトを作ると自動で build.gradle が出来ますが、よく見たら以下の Gradleビルドのプラグインが必ず書いてあるです。
groovy
apply plugin: 'com.android.application'

これでapkを作ることをはじめ、apkを作る前段でいろいろな設定ができます。

BuildTypeとProductFlavorを組み合わせたものがBuildVariantであり、ビルドパターンである

ビルドタイプとプロダクトフレーバーをしっくり来る言葉で説明するのが難しいですが、、

  • ビルドタイプ(buildTypes) デバッグビルドやリリースビルドなど、工程ごとのビルド設定に使われデバッグ機能や難読化などの設定ができます
  • プロダクトフレーバー(productFlavors) 目的別のビルド設定。環境の向き先や用途に合わせた設定で、ソース切り分けなどができます。
  • ビルドバリアント ビルドタイプとプロダクトフレーバーを組み合わせたものです

例)
ビルドタイプが
- debug : 開発時向けのビルドタイプで、デバッグ可能設定としており、難読化もしないようになっている。
- release : リリース向けのビルドタイプで、デバッグ不可能としておりとして、難読化もしている。証明書も商用の証明書を設定している。

プロダクトフレーバーが
- production : GoogleのAPIキーを商用アカウントで設定している。アプリパッケージも商用。
- staging : GoogleのAPIキーを検証アカウントで設定している。アプリパッケージは商用に+.test とつくようにしている

とすると、ビルドバリアントは以下の4つが出来上がります。

  • productionDebug
  • productionRelease
  • stagingDebug
  • stagingRelease

また、不要な組み合わせを除外するためにvariantFilterという機能もあります。
掛け合わせなので単純に組み合わせると膨大になりがちなので、そういうときはこれを使います。

groovy上の構造は以下のようになります。

android { // com.android.applicationプラグインが提供する
  buildTypes { // ここに buildTypes
    debug {
        // ここに必要な定義
    }
    release {
        // ここに必要な定義
    }
  }
  productFlavors { // ここに productFlavors
    production {
        // ここに必要な定義
    }
    staging {
        // ここに必要な定義
    }
  }
}

参考: https://developer.android.com/studio/build?hl=ja

ソースセット管理について

productFlavors 毎にソースセットが管理出来ます。
Gradle にはそもそも sourceSets というプロパティがありますが、Androidでは android.sourceSets を使い productFlavors と併用して使いやすくなっています。

android {
    sourceSets {
        production {
            java.srcDirs = ['other/java']
            res.srcDirs = ['other/res1', 'other/res2']
        }
        staging {
            java.srcDirs = ['other/java']
            res.srcDirs = ['other/res3', 'other/res4']
            manifest.srcFile 'other/AndroidManifest.xml'
        }
    }
    productFlavors {
        production { ... }
        staging { ... }
    }
}

特に、Androidのapkはデコンパイルが簡単なので、セキュリティ観点でもデバッグコードが入らないようにするためにも有効です。

参照: https://developer.android.com/studio/build/gradle-tips?hl=ja#manage-projects-and-sources

まとめ

  • Android のビルドは Gradle です。
  • ビルドバリアント毎にソースの切り分けしやすい。
  • プロダクトの大枠のビルド構成の理解のために、ビルドバリアントの種類と内容を見たら大枠の感覚はつかめるんじゃないでしょうか。
  • できることが多いので、これくらいで。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Android端末とPCを接続し、PCのchrome DevToolsを利用する方法

おおまかな手順

  1. Androidの開発向けオプションを有効にする
  2. USBでPCに接続する
  3. PC側のChromeでchrome://inspectに接続する

操作した環境

  • macOS 10.14.6
  • Android 9

詳細

1. Androidの開発向けオプションを有効にする

  1. 設定から端末情報の画面に進む
  2. 下部にあるビルド番号を7回タップすると開発向けオプションが有効になる
  3. 設定からシステムの画面にいき、詳細設定を開く
  4. 開発向けオプションが表示されているのでタップ
  5. 少し下に画面スクロールするとあるUSBデバッグをONにする → ここ忘れがち

2. USBでPCに接続する

  1. USBでPCに接続する
  2. Android側で「USBデバッグを許可しますか?」と聞かれるのでOKで許可する
  3. Android側のChromeを立ち上げて適当なwebページを表示する

3. PC側のChromeでchrome://inspectに接続する

  1. PC側のChromeを立ち上げ、アドレスにchrome://inspectと打ち込み移動
  2. 接続している端末名とAndroid側のChromeで開いてるwebページ一覧が表示される chrome_dev_inspect.png
  3. webページ名の下にあるinspectをクリックするとAndroid側で開いてる画面を開発ツールでいじれるようになる! chrome_dev_inspect_2.png
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

android の alfred を 使った面会システム (ポケットWiFiで距離延長)

コロナのため 患者さんを直接 家族に会わすことはできません。 そこで 使用しなくなった古いアンドロイドタブレットのカメラを利用し、家族はノートPCの画面を使って面会します。 目玉(カメラ)さえついていればスマホでもOKです。

1.png

wifi電波状況がよければ 下図のポケットwifiは省略できます
古物ばかり使ってるので安価です。なおandroidアプリのalfredは無料版で十分ですし、あとノートPCに無料のgoogle クロミウムをいれたら 準備完了です
二人 (タブレットとノートPC)は 銀河いやちがったインターネットの上で出会います、彦星と織姫のように

alfred.jpg

なお
1)本来ならばwifi ルーターだけで行けるはずですが
廊下から直角に曲がって病室に入っていくので
ポケットwifiを使わなくてはタブレットに電波が飛んでいきませんでした
 
2)alfredは古いandroid のvirsionでもOK
で 自分のタブレットのは5でした

11.jpg

恋愛歌だった君が代

いざな (男)
いざな (女)
君ー>きみー>き(男):み(女)ー>love is forever( とこしえに )
https://www.youtube.com/watch?v=0czO0ZNA0J4 より
なんとのどか
アドレナリンを出すためには、フランス国家
https://www.youtube.com/watch?v=-irf0TtQI3Y

考察
タブレットも ノートPCも 双方とも インターネットの仮想空間のなかにいます。 そしてここにトンネルがあって このトンネルに入るには 同じgmailアドレス(もちろんそのパスワード)でないと入れません。 そういったことで秘密性が確保されてます
従ってこれを自宅のワンちゃんに対してすると ハワイからでも インターネットを通してワンコの様子がみれます
古いandroidしかインストールできないタブレットあるいはスマホでいいのが嬉しい
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む