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

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

非SDK APIのテストについて

### はじめに
SDKが提供するAPIは`whitelist`,`greylist`, `blacklist`に分類され、
タイトルの非SDK APIとは`greylist`, `blacklist`のことを指します。
下記はそれぞれの意味を説明したものです。(公式から[引用](https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces#list-names))

* ブラックリスト
アプリの対象 API レベルに関係なく使用できない非 SDK インターフェース。アプリがこのインターフェースのいずれかにアクセスしようとすると、システムによってエラーがスローされます。

* グレーリスト
アプリの対象 API レベルで制限されていなければ使用できる非 SDK インターフェース。
Android 9(API レベル 28)から、各 API レベルで使用できる非 SDK インターフェースが制限されています。制限付きグレーリストの API へのアクセスは、API

元記事を表示

[LiveData] 更新されたときだけ値を受けとる

二通りの方法を示します。

### 1. LiveData を BroadcastChannel に変換する

いきなりテストです。

“`kotlin
class MyTest {
private val dispatcher = TestCoroutineDispatcher()

@[Rule JvmField]
val rule = InstantTaskExecutorRule()

@Before
fun before() {
Dispatchers.setMain(dispatcher)
}

@After
fun after() {
Dispatchers.resetMain()
dispatcher.cleanupTestCoroutines()
}

@Test
fun test() = dispatcher.runBlockingTest {
// ソースとなる LiveData
val sour

元記事を表示

[SavedStateHandle] やっぱりDaggerとうまく付き合う

以前 SavedStateHandle を DI する方法について[記事を書きました](https://qiita.com/Tsuyoshi_Murakami/items/12678bc77d9a9f2e5813)が、今は正直以下の方法でも良いのではないかと思っています。

“`kotlin
class MyViewModel(handle: SavedStateHandle) : ViewModel() {
@Inject
lateinit var myRepository: MyRepository

val myData: LiveData = liveData {
emitSource(myRepository.getMyData())
}
}
“`

“`kotlin
class MyFragment : Fragment() {
private val viewModel by viewModels()

override fun onCreate(savedIn

元記事を表示

targetSdkVersion を 29 に上げても Robolectric のテストを動くようにする

# 概要
Java 8 の環境で targetSdkVersion を 29 に上げたら RobolectricTestRunner を使うユニットテストが動かなくなったので、対応方法を調べました。

## 問題
テストを実行すると、以下の例外が出てテストが失敗します。

“`
java.lang.IllegalArgumentException: failed to configure jp.toastkid.yobidashi.media.image.preview.RotateMatrixFactoryTest.test: Package targetSdkVersion=29 > maxSdkVersion=28
at org.robolectric.RobolectricTestRunner.getChildren(RobolectricTestRunner.java:240)
at org.junit.runners.ParentRunner.getFilteredChildren(ParentRunner.java:426)

// 中略

at com.inte

元記事を表示

Google認証で ApiException:10 が発生

Google認証をやっていたら、下記の例外が発生

> com.google.android.gms.common.api.ApiException: 10:

下記で解決できるらしい。

**■参考サイト**
https://medium.com/@riscait/apiexception-10-error-in-sign-in-with-google-using-firebase-auth-in-flutter-1be6a44a2086
https://stackoverflow.com/questions/47437678/why-do-i-get-com-google-android-gms-common-api-apiexception-10

元記事を表示

Android studioのemulatorでインターネットに繋がらない現象を解決する

Android studioでemulatorを起動し外部APIへGETリクエストを実行しようとするもレスポンスが取得できずなんでだろうと思っていたらそもそもインターネットにできない状態でした.

# 環境
端末: Nexus5X
API version: 28

# 現象
![cannot_reached.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252857/affe2198-13c5-41b7-f788-c7c6c7ae0de9.png)

# 対応
ホスト側のDNSを8.8.8.8(GoogleのDNS)に変更後,emulatorを再起動することで解決
dns_setting.png

再起動後
![reached.pn

元記事を表示

[Android]GoogleMap上ランドマークのストリートビュー表示

# GoogleMap上ランドマークのストリートビュー表示

以下の手順となります。
・ランドマークからPlaceIDを使ってplace/details API 実行して情報取得
・imageViewに表示するためライブラリ導入
・ストリートビュー表示する

## ランドマークからPlaceIDを使ってplace/details API 実行して情報取得
https://qiita.com/myatthinkyu/items/efc901d88a5f9d031c4f

## imageViewに表示するためライブラリ導入
“`
implementation “com.github.bumptech.glide:glide:4.8.0”
“`

## ストリートビュー表示する

“`
buildingInfo.firstOrNull()?.let {
var location = it.result!!.geometry!!.location
var locationlatlng = location!!.lat.t

元記事を表示

同一のRadioGroupに入っているRadioButtonを画面上の自由な位置に配置したい

#概要
Androidの標準APIで提供されている`RadioButton`と`RadioGroup`。

複数の`RadioButton`を1つの`RadioGroup`の中に入れ子にすれば、その中で同時に一つだけが選択可能になる、とここまではいいのだが、`RadioButton`は自由に配置することが許されない。

#なんでRadioButtonは自由に動かせない?
ドキュメントでもなんでも見ればわかるのだが、`android.widget.RadioGroup`は**`android.widget.LinearLayout`を継承している**ため。

LinearLayoutが何だかはみんな知ってるでしょう。
つまり横1列か縦1列にしか並べられないということ。

なんでやねん!!
#解決策
ということで、作っちゃいました。そういうクラス。

“`java:FreeRadioGroup.java

import android.util.Log;
import android.view.View;
import android.widget.CompoundButton;
imp

元記事を表示

Androidエミュレータの日本語化(Android9)

## 設定アプリを起動

## 設定の一番下にあるSystemを開く

## Languages & inputを選択
M5Stackで測定した温度と気圧をBLEで飛ばし、Androidアプリで受け取ってみる

本記事は、仙台のメイカースペース”[FabLab Senda FLAT](http://fablabsendai-flat.com/)”で、Arduino等を使いながらIoT的機器を作っている集まりで発表した内容をまとめたものです。
この集まりはハード寄りの人が多いため、スマホアプリのBLEの開発についてのさわりについて発表しました。

# 概要

M5StackのENV.Sencorから温度と気圧を読み取り、そのデータをBLEのAdvertisingで飛ばします。
そして、Androidアプリで温度と気圧のデータを受け取りアプリ上で表示します。

![overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67657/08053d12-9944-0d54-e691-9ab36a421f98.png)

BLEでは双方向通信のポイントトゥーポイントと単方向のブロードキャストモードがありますが、今回は簡単なブロードキャストモードモードのみを扱います。

# ソースコード

https://gith

元記事を表示

Flutter環境構築 – 4(VSCodeセットアップ編)

#はじめに
今回はFlutter環境構築第4弾 「VSCodeセットアップ編」です!
Flutter SDKのインストール・Flutterコマンドのセットアップがお済みでない方は、
先に「Flutter SDKインストール編」をご覧ください。

**Flutter環境構築シリーズ**
・[Flutter環境構築 – 1(Flutter SDKインストール編)](https://qiita.com/naru_chan__/items/359fcdfb8aa092e9a44e)
・[Flutter環境構築 – 2(Xcode・iOSシミュレーターセットアップ編)](https://qiita.com/naru_chan__/items/d64455cb7d0e7dd223a5)
・[Flutter環境構築 – 3(Android Studio・Androidエミュレータセットアップ編)](https://qiita.com/naru_chan__/items/94e8e2f85bd1803feddd)

#「VSCodeセットアップ編」でやること
本編では以下の項目を行います

– VSC

元記事を表示

[Android]Google アカウントを利用して Firebase にサインインする

# はじめに

Firebase には FireabaseUI Auth という予め用意された UI を使ってサインインする方法と Fireabase SDK を利用してサインインする 2 つの方法があります。今回は Fireabase SDK を利用して Firebase にサインインする方法を試してみます。また Firebase には Mail・Google・Twitter・Facebook などでサインインする方法があるのですが、色々試すのは大変なので Google を使ったサインインするようにしてみます。

# 準備

Firebase を利用するには Firebase プロジェクト、 Android プロジェクトの作成が必要になります。なので下記の手順でセットアップをしていきます。

## Firebase のプロジェクトを作成する

次の手順で Firebase のプロジェクトを作成していきます。

1. [Firebase] にサインインし、「プロジェクト」の作成を選択する。
2. 「プロジェクト名」に任意の名称を入力して、「続行」を選択する。
3. 「Googleアナリ

元記事を表示

シンガポールの感染追跡アプリを動かしてみる

スクリーンショット 2020-04-19 13.03.08.png

コロナの世界的な感染拡大を受けて、Bluetoothのブロードキャストを利用した感染追跡アプリが各国で開発されています。シンガポールが、3月20日にリリースしたTraceTogetherがその始まりですが、このアプリは仕様とコードが公開されていて、動作を試してみることができます。

リポジトリは4つあり、iOSクライアント(Swift)、Androidクライアント(Kotlin)、サーバ(TypeScript)、そしてBluetoothの電波強度から距離を補正するキャリブレーションのデータです。
サーバはFirebaseのCloud F

元記事を表示

FlutterでFirebaseを使ってみる〜Google Sign In導入〜

今回はFlutterのデフォルトアプリにGoogle Sign Inを導入し、ログイン機能を実装してみたいと思います。
プロジェクトの作成は[前回](https://qiita.com/121a/items/ee488298a5b9468c3b57)までと同様です。
※今回は、Flutterプロジェクト作成時のPackage nameは**一意**になるように設定しておいてください。
スクリーンショット 2020-04-15 17.38.28.png

## 事前準備(共通)
Firebaseプロジェクトにて、Google Sign Inを有効化します。
Firebaseプロジェクトを開き、左ペインから**Authentication**を選択し、**ログイン方法を設定**をクリックします。

元記事を表示

【Android】ダークテーマを反映するアプリ起動時の適切なタイミングについて【Kotlin】

Android 10 で公式にサポートされた「**ダークテーマ(ナイトモード)**」ですが、スレッド式メモ帳アプリ『**[CBnotes](https://play.google.com/store/apps/details?id=cutboss.cbnotes)**』では、Android 10 未満の端末にインストールしても「ダークテーマ(ナイトモード)」の切り替え設定が可能になっています。

以下の公式ガイドに従って、アプリを DayNight テーマから継承すれば、簡単に「ダークテーマ(ナイトモード)」を実現できました。『[CBnotes](https://play.google.com/store/apps/details?id=cutboss.cbnotes)』では、「**[MaterialComponents のダー

元記事を表示

眺めて覚える C# Xamarin (6) 音声合成

#早い話がAndroidにしゃべらすプログラムです。
##なるべくちょいちょいとやるためには、Nugetでプラグインをインストールします。
#Step1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/27bf828e-c058-2f5c-2a61-c1a5249e8d4e.png)
#Step2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/9b8a593f-3dc1-46e2-1aa1-09237ad908d2.png)
#Step3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/7b6bf33b-ab16-c7a3-02ce-01b75b5c489d.png)
#Step4
![image.png](https://qiita-image-sto

元記事を表示

Android 11 Labs Day 1 メモ書き

[Android 11 Labs](https://developersonair.withgoogle.com/events/android11labsjp) の Day 1 で気になったところだけメモ。

# はじめに
– 2020年02月に Developer Preview 開始
– 3月、4月も Developer Preview、5月に Beta版 Pixcel にインストール可能
– 7月 – 9月 に正式版リリース予定、たぶん9月ごろかなあ
– 正式版用意できたら Pixel にはすぐ配信される

# パーミッションについての開発者向け最新技術情報
– 位置情報、マイク、カメラのパーミッション取得に「今回だけ許可する」Only this timeが追加される
– コード上は許可は許可だけど、ストレージに「許可済」とかいうのを保持して実装したりしてたらおかしくなるかもね
– なぜパーミッションの取得をしようとしているのか、説明しようね
– 一度拒否されたかどうか判定できる shouldShowRequestPermissionRationa

元記事を表示

[Android]GoogleMap上ランドマークタップして建物情報を取得

# GoogleMap上ランドマークタップして建物情報を取得

以下の手順となります。
・ランドマークタップイベントを取得
・Google Map SDKからデリゲートを通してPlaceIDを取得する
・PlaceIDを使ってplace/details API 実行して情報取得

## ランドマークタップイベントを取得

GoogleMap.OnPoiClickListenerをextends する

“`
class MapsActivity : AppCompatActivity(), GoogleMap.OnPoiClickListener {
mMap.setOnPoiClickListener(this@MapsActivity)
“`

## Google Map SDKからデリゲートを通してPlaceIDを取得する

“`
override fun onPoiClick(landmark: PointOfInterest?) {
var placeIdLandMark = landmark!!.placeId
“`

## PlaceIDを使ってplac

元記事を表示

加速度センサのサンプリング周波数を調整できるAndroidアプリを作った話

#概要
私事ですがサクジツ,3軸加速度センサの値がcsvファイルで欲しくなりました.Qiita仲間の皆さんであれば誰しもこのような経験はあると思います

ということでXperiaが手元にあったので,google playから早速検索,加速度センサロガーなるものを片っ端からインストールしてみました

するとなんと!サンプリング周波数が任意に設定できません...

しかしiOSには設定できそうなアプリが存在したので,Androidでも作れるのではないかと健闘した物語です

#まず調査
(注意)この章は作業ログならぬ勉強ログっぽく書いていきますので,日記感覚で見てください

すべてのアプリ(サンプル数6,7個)に共通している点で,サンプリングの間隔を大体でしか調整できませんでした

これについて調査していくと,加速度センサにおいては他の端末センサと違い具体的なサンプリングのレートを調整することができないらしいです
[SensorManagerのリファレンス](https://developer.android.com/reference/android/hardware/SensorMana

元記事を表示

データバックアップ

#データバックアップの実装方法の参考サイト

Androidアプリのデータバックアップは下記の2通りあるらしい。

・Key-Valueバックアップ(Android Backup Service)
・Android自動バックアップ

実装で参考にしたサイトは下記のとおり。

**■公式サイト**
https://developer.android.com/guide/topics/data/backup

**■Key-Valueバックアップ(Android Backup Service)**

Key-Value形式のバックアップ機能詳細


https://www.atmarkit.co.jp/ait/articles/1307/18/news026.html

**■Android自動バックアップ**

Android自動バックアップ(Auto Backup for Apps)詳細

**■FileBackupHelperでSQLiteのデータベースファイルをバックアップする**
https://esmasui.hatenadiary.org/e

元記事を表示

OTHERカテゴリの最新記事