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

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

MediaCodecとBluetoothを使ってミラーリングソフトを作る

## 目的
Android搭載ウェアラブル端末触る際に出力されてる画面を手元のスマホに写すようにすれば楽じゃね?ってのがスタート。
初Androidアプリ作成&初Kotlinなのでたくさん叩いてください。

今回は非同期処理になるのでMediaCodecのCallBackで処理します。
送信端末がZenfone5、受信側がPixel3で動作確認をしています。
OSのバージョンによっては修正が必要な箇所がでますが適宜書き換えてください。

## 使ったもの、参考にしたもの
* [AndroidDevelopers](https://developer.android.com/guide/topics/media/media-codecs?hl=en)
* 公式です。
* [BluetoothChat](https://github.com/googlearchive/android-BluetoothChat)
* Bluetoothの接続、送受信に使用
* Bluetooth周りは全てここ使ってます。
* [Androidの画面をPCにミラーリングするソフトを作

元記事を表示

51歳から(現52)のプログラミング 備忘 Fragment 静的動的

#Fragment 静的生成
##Fragmentを静的に描写する流れ
1.MainActivity.classを実行すると、onCreate()でレイアウト(activity_main.xml)を生成
2.activity_main.xmlに\タグを記載しておくと、
  レイアウト(activity_main.xml)を生成するときに、
  \を記載した表示領域でFragment.classを呼び出す
3.呼び出されたFragment.classのonCreate()でレイアウト(fragment.xml)が生成され、
  activity_main.xmlで記載した表示領域にfragment.xmlが描写される

MainActivity.class -> activity_main.xml -> Fragment.class -> fragment.xml

##サンプルコード Fragmentの静的生成
“`java:MainActivity.java
@Override
protected void onCreate(Bundle s

元記事を表示

AAC Navigationでnavigate同時実行時のクラッシュへの対処法

## 問題

例えば、AAC Navigationのnavigate()するボタンを2つ同時に押すなどした時に以下のように怒られクラッシュする。

“`
2020-02-13 15:24:08.709 21427-21427/jp.studysapuri.for_school.dev.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: jp.studysapuri.for_school.dev.debug, PID: 21427
java.lang.IllegalArgumentException: navigation destination jp.studysapuri.for_school.dev.debug:id/action_mypageFragment_to_searchSchoolByConditionFragment is unknown to this NavController
“`

## 原因
navigate()が2つ同時に実行された場合、2つ目の実行時には現在の画面(ナビゲーション

元記事を表示

TextView内の特定の文字列に対して手軽にタップイベントを追加する

Androidアプリ内のTextViewに対してWebのハイパーリンクのようなタップイベントをつけたい事がたまによくあるので、通常のonClickイベントと同じ使い勝手でなるべく簡単に扱えるようKotlinの拡張関数を書いてみました

## 使用感イメージ

下記のスクリーンショットのように使うイメージです。
よくある利用シーンとしては「利用規約」や「プライバシーポリシー」の文言にタップイベントをつけたりするときとかですかね

利用側のコードもここまで簡潔に記述する

元記事を表示

【Android】アプリを多言語化/ローカライズしたい(RTL対応あり)

# 概要
作成していたAndroidアプリを国外で配信する可能性があったため、アプリを日本語以外にも対応させたかった。
そこで、アプリを多言語化(ローカライズ)する方法や、アラビア語などの右読み言語(RTL; Right To Left)の場合はどうするかを調べてまとめた。

# 多言語対応方法
## リソースを用意する
`<アプリプロジェクト>/app/src/main/res`の中には、例えば以下のようなリソースのディレクトリが格納されている。

– `drawable`(画像)
– `values`(色や文字列などの値)
– `layout`(レイアウト)

対応したい言語のリソースディレクトリを用意すると、Android端末の設定を拾って、その言語に対応した表示になる。
ディレクトリの名前は次のようにする。

– `<リソースのタイプ>–<言語コード>[-r<地域コード>]`
`res/values-ja`、`res/values-en-rGB`など
– `<リソースのタイプ>-b+<言語コード>[+<地域コード>]`
`res/values-b+en+001`など

元記事を表示

各OSのBluetoothの仕様

# 各OSのBluetoothの仕様

[iOS](https://developer.apple.com/accessories/Accessory-Design-Guidelines.pdf)

場所
>25.5 Advertising Interval
The accessory should first use the recommended advertising interval of 20 ms for at least 30 seconds.
If it is not discovered within the initial 30 seconds, Apple recommends using one of the following longer
intervals to increase chances of discovery by the device:
● 152.5 ms
● 211.25 ms
● 318.75 ms
● 417.5 ms
● 546.25 ms
● 760 ms
● 852.5 ms
● 1022.5 ms
● 1285 ms

>推奨

元記事を表示

BleManager option

# BleManageroption

[BleManager](https://github.com/innoveit/react-native-ble-manager)

スキャンoptionでconnect成功率、速度向上できます

## Android

まずAndroidじゃ!

– scanningOptions – JSON – [Android only] after Android 5.0, user can control specific ble scan behaviors:
– numberOfMatches – Number – corresponding to setNumOfMatches
– matchMode – Number – corresponding to setMatchMode
– scanMode – Number – corresponding to setScanMode
– reportDelay – Number – corresponding to setReportDelay //

元記事を表示

TensorFlow Liteを使用して、Androidで人間のポーズをリアルタイムで追跡する

オンデバイスインテリジェンスのためのGoogle Coralソリューション:

✅姿勢推定:さまざまな身体の関節を特定することにより、画像内の人々の姿勢を推定します。

![alt](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F448511%2F1c91ac72-82aa-82e2-5fab-691bfbe63d88.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&w=1400&fit=max&s=dd6466e244d15dbeaa980e41ec09dad1)

PoseNetは、主要な身体部分の位置を検出することにより、画像またはビデオ内の人物の姿勢を推定するビジョンモデルです。 例として、モデルは画像内の人の肘や膝の位置を推定できます。 ポーズ推定モデルは、画像内の人物を識別しません。 主要な身体部分の位置のみ。

TensorFlow Liteは、デバイスのカメラを

元記事を表示

【Android】Navigationの遷移先にあわせてToolbarをカスタマイズする

# はじめに
みなさん、[Navigation Component](https://developer.android.com/guide/navigation)使ってますか?

Fragment間の画面遷移や値の受け渡しなどを非常に楽にしてくれるNavigationですが、ToolBarと併せて使用した時にいくつか詰まったポイントがありましたので、本記事で紹介したいと思います。

※2020/02/14 FragmentContainerViewについて追記しました

# この記事で紹介すること
– Navigation + Toolbarを扱う時に困りがちなことの解決方法

# この記事で紹介しないこと
– Navigationの基本的な使い方

Navigationの使い方を知りたい場合は[こちら](https://qiita.com/jimmysharp/items/06f3157152fbc4cd5113)の記事が参考になります。

# リポジトリ
こちらに今回のサンプルを置いておきます。
https://github.com/nanaten/Navigation-and-

元記事を表示

AndroidStudioでプロキシの設定を解除しても反映されないときの対処法

## 目次
1. 概要
2. 環境
3. 解決方法
4. 原因
5. まとめ

## 1. 概要
一度プロキシ設定を行った後に、File->setting->System Setting->HTTP Proxyから`No proxy`を選択してもプロキシ経由でアクセスしてしまい、解決に時間が掛かったので解決方法を残しておきます。
## 2. 環境
– AndroidStudio 3.5.1

## 3. 解決方法
gradle.properties(Grobal Properties)の記述を削除したら,非プロキシ環境下でも動作しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437348/d57a0b70-2db6-8f06-6788-b29eb86047e1.png)
上の4行を削除

## 4. 原因
AndroidStudioの`setting`でプロキシの設定を行うと、自動で`gradle.properties`にプロキシの設定が追加されます。しかし、`No Proxy

元記事を表示

libtensorflow_inference r1.15 を Android 向けにビルドするメモ

## 背景

* C/C++ で, 既存 r1.x 系の Tensorflow(C binding) 推論アプリを Android でも動かしたい
* 速度はそんなに問わないし, そもそも tflite では動かないモデルがある
* Java レイヤーは使わない

tensorflow + Android で検索するとだいたい tflite がヒットしてしまいますが, ここでは本来の(?)libtensorflow を Android 向けにビルドしてみます.

モバイルでは tflite 推奨で, libtensorflow のモバイル向けビルドは非推奨となっています.
とはいえ, そもそも tflite では動かないケースが多いので(特に RNN とか使っていたりする音声系), 頑張って libtensorflow を動かしてみます.

libtensorflow on Android では, CPU のみの対応になります.
現状 C++ API のみのようです. また, 使える C++ API には制約があります
(C API は根本からビルドを変えないといけない

元記事を表示

WebViewでcssのvhが効かない時はLayoutParamsでheightを設定しよう

# タイトル通りなんだけど一応コード

WebView webView = new CustomWebView(getActivity());
parentLayout.addView(webView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

高さが設定されていないとvhは機能しない。

元記事を表示

ExoPlayerのv2.11で個人的に便利だと思ったやつ

# WakeLockを自動で取得

バックグラウンドでの安定して再生させるためにWakeLockを取得するわけですが、WakeLockは取得したままだと電池を消耗してしまうので再生状態に応じてWakeLockを自動で取得 / 開放してくれる機能が付きました。

> Add automatic WakeLock handling to SimpleExoPlayer, which can be enabled by calling SimpleExoPlayer.setHandleWakeLock (#5846). To use this feature, you must add the WAKE_LOCK permission to your application’s manifest file.

使い方はかんたん。 `setHandleWakeLock` で `true` を設定するだけ

“`kotlin
SimpleExoPlayer.Builder(context).build().also {
it.setHandleWakeLock(tru

元記事を表示

遅延評価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

元記事を表示

OTHERカテゴリの最新記事