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

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

THETA Photo Dog [THETA Plug-in OLED活用]

#はじめに
リコーの[Yuuki_S](https://qiita.com/Yuuki_S)です。
弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA VやTHETA Z1は、OSにAndroidを採用しており、Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます。(詳細は本記事の末尾を参照)。
***
プラグイン開発ができるTHETAには、VとZ1の二種類があります。
このうち、Z1はフラッグシップ機。
1.0型裏面照射型CMOSイメージセンサーを搭載しRAW撮影も出来るスグレモノです。

これまでずっとVでプラグイン開発をしてきた自分ですが、ついにZ1を利用する機会がやってきました!
Z1を手にして、さて、どんなプラグインを作ろうかとまじまじと見比べてみます。
3世代Dagger Hilt の Context まわりでハマったこと

Dagger Hilt では、Context クラスが必要な場合のために、`@ApplicationContext`アノテーションと`@ActivityContext`アノテーションが用意されています。
[Hilt を使用した依存関係の注入  |  Android デベロッパー  |  Android Developers](https://developer.android.com/training/dependency-injection/hilt-android?hl=ja#predefined-qualifiers)
Context を使う上でハマったポイントがあったので、備忘録として残しておきます。

# 事例

例えば SharedPreferences をラップした、`SharedPreferencesWrapper`クラスを`MainActivity`で使う場合を考えてみます。

“`kotlin:MainActivity.kt
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

@In

元記事を表示

Flutter実装時にお世話になったページ 2020/11/18

## なにか

毎回、同じ問題に、同じ検索して、同じページで解決してるので。。。

## ContainerのBottomにだけ、枠線を入れたかった

[Stack Overflow “How to add a border to a widget in Flutter?”](https://stackoverflow.com/a/53680045)

## url_launcherでカスタムURLスキーマを使用したアプリ起動ができなかった(Android)

AndroidManifestまで意識が行かなかった。。。

[Stack Overflow “[url_launcher] When targeting API 30, canLaunch always retrurns false”](https://github.com/flutter/flutter/issues/63727#issuecomment-691066239)

## flutter upgradeしたら、ビルド通らなくなった。。。

こんなエラーが出るようになりました。

“`
Flutter Row()

元記事を表示

HMS Location Kit Android SDKの導入方法について

#1. Location Kitの概要
[Location Kit](https://developer.huawei.com/consumer/jp/hms/huawei-locationkit)はHMSの位置情報関連のサービスを提供するSDKです。
今回はLocation Kitの機能と使用方法について説明したいと思います。

##1.1 機能
Location Kitは以下の3つの機能を提供しています。

**1. ハイブリッド測位による位置情報の取得**
**2. ジオフェンス機能**
**3. 運動状態の識別機能**

それぞれの機能の概要と使用シナリオについては以下で紹介します。

###位置情報の取得
Location KitのAPIを使用することで、ハイブリッド測位(GNSS, WiFi, 基地局)による位置情報の取得ができます。
また、東京、大阪、名古屋などの主要都市でSuperGPS機能がサポートされ、位置情報を取得する際には、ロードサイドが分かるように精度よく位置情報を取得できます。

**利用シナリオ**
・現在地の取得
・タクシー予約アプリの場合、道路のどの側

元記事を表示

AutoCompleteTextViewにフォーカスを当てたままキーボードを非表示にする

## 環境

Android Studio 4.1.1
Build #AI-201.8743.12.41.6953283, built on November 5, 2020
Runtime version: 1.8.0_242-release-1644-b01 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
GC: ParNew, ConcurrentMarkSweep
Memory: 4029M
Cores: 8
Registry: ide.new.welcome.screen.force=true, external.system.auto.import.disabled=true
Non-Bundled Plugins: org.jetbrains.kotlin, com.developerphil.adbidea

## AutoCompleteTextViewとは

キーボードによるインプットに対して、
自動で文字を補完してくれる機能を備えもったEditTextのことです。

通常、

元記事を表示

Github Actionsを使って自動テストをした話

# はじめに
今回はGithub Actionsを使って自動テストをした話を紹介していきたいと思います。

# 自動テストのタイミング
PR出したタイミングとかPR出したブランチにpushしたタイミングでいいのでは?
と思う方もいるかもしれません。

Github Actionsはpublicなレポジトリだと無料ですが、Organizationで使うと従量課金制になっています。
テストの量が多い場合、push毎にCIを走らせてしまうととんでもない実行時間になってしまいます。

またPR出したタイミングで修正があることに気付き新しくpushした場合、その部分はグリーンになっている保証はありません。

なので今回はレビュワーがapproveしたタイミング(LGTMしたタイミング)で自動テストを回すようにしました。

PR出す→修正がある場合は新たにpush→レビュワーがapprove→テスト→成功でも失敗でもslackに通知

# レビュー時にテストをする方法
自動テストのやり方などはググればたくさん出てくるんですが、approveされたらという条件が合致するものがなかったので苦労しました

元記事を表示

【Android】なんとかAndroidアプリのaabファイルのビルドに成功した件

【Android】GooglePlayアプリのkeystoreパスがわからず新規アプリ登録した件
https://qiita.com/technopixelinc2019/items/e7150caeadd1aff6ba4d

上記の記事の続きです。
初心者向け、かつ自分への備忘録として記載残しておきます。

ビルドしようとすると「Gradle build failed」と出るので調べてみる。
【参考URL】

参考ページによると、Unity2019からはBuild Settingsの項目から「Build System」が削除されたとの事。以前のver.なら「Systemの項目をInternalに設定」で良かったらしい。

Unity2019以降の場合は、Build Settingsの「Export Project」にチェック

元記事を表示

【Android】GooglePlayアプリのkeystoreパスがわからず新規アプリ登録した件

【Android】GooglePlayのアプリを更新しようとしたらkeystoreのパスワードを忘れていた件
https://qiita.com/technopixelinc2019/items/754adba7fb151c5c62eb

上記の記事の続きです。
結局パスは思い出せずじまい、新規アプリで登録する事にしました。
ただ、ビルドしようとするとエラーばかり。

参考になるかわかりませんが、自分と同じようなプログラマ初心者に向けて記載しておきます。

unityでビルドしようとしたら下記エラー。
unable to install additional SDK platform. please run the SDK Manager manually make sure you have the latest set of tools and the required platforms installed. See Console for details.

ググって調べてみると、2020/8/3からandroidAPI29以上が必要になったとの事。

参考URL
【Unity

元記事を表示

Flutter実装時にお世話になったページ 2020/11/17

## なにか

毎回、同じ問題に、同じ検索して、同じページで解決してるので。。。

## TabBarViewのスワイプによる切り替えを無効にしたかった

[Stack Overflow “disable swiping tabs in TabBar flutter”](https://stackoverflow.com/a/51523272)

## Firebase の Cloud Messaging による通知がiOSで受け取れなかった

公式ドキュメントをちゃんと読めってことですね。
iOS Integration のステップ2で、以下を読み落としてたのと
> Don’t follow the steps named “Add Firebase SDK” and “Add initialization code” in the Firebase assistant.

Dart/Flutter Integration のここを実装せずにテストしてました。(Androidは無くても届く)

“`
import ‘package:firebase_messaging/fireba

元記事を表示

Camera2+AudioRecord+MediaCodec+MediaMuxerでMP4録画するときの “こけポイント”

# TL;DR
AndroidのCamera2,AudioRecord,MediaCodec,MediaMuxerを組み合わせてMP4録画機能を実装する中で,
『こけポイント』(ハマりポイント)に何個かぶつかったので,記録として残しておきます.
ぐぐってもあまり出てこなかったものばかりなので,このTextが誰かの助けになればと.

(Code全体の説明は大規模になりすぎるので,こけポイントだけ書いておきます)

# 全体構成
↓ のような一番シンプルな構成を実現したときの,こけポイントを書きます.
![blueprint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129035/5533b90d-9c71-8b9f-60f1-821a623df8cc.png)

# こけポイント

## GL/EGLでMediaCodec Input SurfaceにRenderした画がEncodeされない

VideoのEncodeのために,MediaCodecのInput Surfaceに画を描く方法として

元記事を表示

脱SharedPreferences、DataStoreに移行してみよう

# はじめに
Android開発について学んでいる時、SharedPreferencesは序盤に触れるものではないでしょうか?
つい最近その代替となるライブラリがリリースされたので紹介したいと思います。

# Jetpack DataStoreとは
[Jetpack DataStore](https://developer.android.com/topic/libraries/architecture/datastore)は[Shared Preferences](https://developer.android.com/reference/android/content/SharedPreferences?hl=ja)の代わりに利用できる新しいライブラリです。Kotlin CoroutineとFlowを使っているので、非同期の読み取りや書き込みを簡単に行うことができます。(執筆時点の最新版は1.0.0-alpha02です)

現状まだ解説されているページが少なく、いろいろな情報が断片的に散らばっているような状況なので調べたことを整理しつつ、纏めたいと思います。

# Prefer

元記事を表示

Android Firebase Cloud Messaging notification

Android Firebase Cloud Messagingで、ノーティフィケーションが表示されるのは、アプリが終了している状態。
アプリが起動中、または、バックグラウンドにある状態では表示されない

元記事を表示

Pepper SDK入門(5) Robot focus と Robot lifecycle

Pepper SDK Plugin導入から始まり、簡単なロボアプリの開発を行ってきました。今回は、QiSDKの基本となるRobot focus と Robot lifecycleについて説明します。

#1.フォーカスを理解する
まずはロボットフォーカスについての簡単な説明です。 Activityがロボットのアクションを実行するためには、ロボットフォーカスが必要です。ロボットフォーカスはフォアグラウンドのActivityだけが保持することができ、ロボットフォーカスオーナーと呼ばれます。ロボットフォーカスはQiSDKに管理されており、Activityはいつでもロボットフォーカスを獲得したり喪失したりする可能性があります。

#2.ロボットライフサイクル
Pepper SDK入門(2) はじめてのロボアプリ開発①で登場したロボットライフサイクルについてです。 QiSDKがそれぞれのActivity用のロボットフォーカスを渡すために、RobotLifecycleCallbacksインタフェースを実装したオブジェクトが必要になります。以下はActivityにRobotLifecycleCall

元記事を表示

Pepper SDK入門(6) アクション

ロボットフォーカスとロボットライフサイクルに関しては、前回学習しました。今回はPepperのアクションについて掘り下げます。

#Pepperでのアクション実行
Pepperは、話す・聞く・動く・アニメーションを再生する・人間を見つめる・チャットを行う・視線を動かす・特定の地点に留まる・写真を撮るといった動作が可能です。アプリを開発する際、これらのアクションがメインの構成要素になります。

**前提条件**
このページで説明しているアクションの利用方法を理解するためには、Javaの非同期やスレッドに関する知識が必要です。

##1.アクションの作成
ビルダーを用いて、アクションを同期もしくは非同期で作成します。以下が各アクションをビルドする手順です。

1.アクションのビルダーにQiContextを渡す
2.ビルダーへアクションのパラメータを渡す
3.buildメソッドかbuildAsyncメソッドを呼び、アクションを作成する

**同期**
アクションを同期で作成するため、ビルダーのbuildメソッドを呼びます。

“`java

Say say = SayBuilder.with

元記事を表示

Pepper SDK入門(9) オートノマスライフ

オートノマスライフについて、簡単な概要を説明します。

#自律モードの管理
Pepperはオートノマスライフというモードを持っており、人間の検知や追跡、音への反応や立ち位置の調整といった振る舞いを、自律して自然に行い、Pepperをより生き物らしく見せています。

#1.Autonomous abilities
Autonomous abilitiesとは、Pepperに備わる複数の自律行動の機能のことです。自律行動はPepperへ生命らしさを与えるため、移動・アニメーション・顔追跡によって構成されています。

#2.Autonomous abilitiesの管理
写真撮影など、Pepperのアニメーションの動きを完全に停止させたい場合には、Autonomous abilitiesを止める機能を使用してください。ここでは概要のみの記述ですが、詳細はまた改めて解説します。

いつもよりも短いですが、今回はここで終了です。次回はアニメーションブラウザについて見ていきます。

元記事を表示

Pepper SDK入門(4) はじめてのロボアプリ開発③

アプリの実行についてまとめた前回の学習を踏まえ、このチュートリアルでPepperに”Hello human!”と発話させる簡単なアプリを開発していきます。

**前提条件**
Android Studio、Pepper SDK plugin、Robot SDKとその関連ツールがインストールされていること。

# 1.新規プロジェクトの開始
– HelloPepperの名称で、新しいプロジェクトを開始してください。
– Fileメニュー >New > Robot ApplicationからQiSDKの初期設定が完了していることと、ActivityにonCreateメソッドとonDestroyメソッド、及びRobotLifecycleCallbacksインターフェースが実装されていることを確かめてください。

# 2.発話の実行
Pepperを発話させるために、[Say](https://qisdk.softbankrobotics.com/sdk/doc/pepper-sdk/ch4_api/conversation/reference/say.html#say)クラスを使用します。これ

元記事を表示

Pepper SDK入門(8) アクションの連結

同期と非同期について、今回は様々なクラスやメソッドと共に解説を行っていきます。

#1.同期と非同期
アクションを順番に実行したい場合、同期で実行するようにコードを書く必要があります。

“`java

//animateアクションのビルド
Animate animate = …;
//animateアクションを同期で実行
animate.run();
//listenアクションのビルド
Listen listen = …;
//listenアクションを同期で実行
listen.run();
“`

ここでは[Animate](https://qisdk.softbankrobotics.com/sdk/doc/pepper-sdk/ch4_api/movement/reference/animate.html#animate)と[Listen](https://qisdk.softbankrobotics.com/sdk/doc/pepper-sdk/ch4_api/conversation/reference/listen.html#listen)を同期で順番に実行し

元記事を表示

Pepper SDK入門(3) はじめてのロボアプリ開発②

Androidプロジェクトの作成及びロボアプリの初期設定を行った前回に引き続き、Pepperのエミュレータと実機でアプリを実行するために必要な手順を確認していきます。

#1.Pepperのエミュレータ
まずは、Pepperのエミュレータで動作確認するための方法についてです。

**<手順>**
1.エミュレータボタン![WS000003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574697/63caa825-0f6a-984b-51a3-b5e969d4d75f.png)をクリックしてください。すると、ロボットエミュレータが表示されます。
2.プロジェクトにおける実行の構成でappが選択されているか![WS000002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574697/328c4224-a649-0da9-08c1-95d63fa408d6.png)を確認し、選択されていない場合はそれを選択して

元記事を表示

Pepper SDK入門(2) はじめてのロボアプリ開発①

発話を行うロボアプリの開発をしながら、開発手順について説明していきたいと思います。Androidプロジェクトを作成し、ロボアプリの初期設定を行い、ActivityがPepperを操作するために必要な実装について見ていきます。

#1.プロジェクト作成
ロボアプリ開発にあたって、まず初めに標準的なAndroidプロジェクトを作成し、それにロボアプリの設定を追加します。Android StudioのFileメニューのNewからNew Projectを選択し、Androidプロジェクトを作成してください。プロジェクト作成時のTarget Android DeviceではPhone and TabletのAndroid 6.0 (Marshmallow)が選択してください。

#2.ロボアプリの初期設定
作成したAndroidプロジェクトにロボアプリの初期設定を行います。

**<手順>**
1.FileメニューのNewからRobot Applicationを選択します。
2.サポートするRobot SDKのバージョンと追加するモジュールを選び、OKをクリックしてください。
3.Sync

元記事を表示

Pepper SDK入門(7) UIスレッドとワーカースレッド

前回、アクションについて解説するなかで同期と非同期の区別が登場しました。今回はその同期と非同期について、UIスレッドとワーカースレッドの二つを主軸に見ていきます。

**同期と非同期**
Pepperではタブレットと本体でそれぞれ異なるプロセスが動いており、二つのCPU間にはUSBを経由したTCP/IPによる通信があります。 同期と非同期のどちらでアクションを実行するかは、実際に動かしてみた上での選択をお勧めします。

#1.UIスレッド
Androidシステムからのコールバック(onCreateやOnClickListenerなど)はUIスレッド上で動作します。

“`java

@Override
protected void onCreate(Bundle savedInstanceState) {
}
@Override
protected void onResume() {
}
“`

タブレットからPepperに指示を出した場合、Pepperとタブレット間での通信が発生します。しかしUIスレッド上でのネットワーク通信は出来ないため、NetworkOnMainThrea

元記事を表示

OTHERカテゴリの最新記事