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

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

YUV420_888のBitmap化

## CameraXつかってみた

とりあえず、最低限の利用のドキュメントで簡単にプレビューのデータが取れそうなのでやってみた。

とはいえ、取得できるImageデータはBitmapにすることすら標準的には存在していないぽい。

まあ、YUVのままもろもろ処理もいいですが、PreviewViewじゃなくてImageViewでプレビュー出してみたいからBitmap化しよう。

で、いろいろネットの海をさまよったが、とってもわかりにくかったのでまとめた。

## YUV420_888のこと
YUVそのものの詳細は説明しません。
Yが輝度でUVがカラー座標という映像情報のデジタル化手法という感じ。

YUV420は輝度はすべてのピクセルに対応した量があり、UVは近傍4ピクセルに一つのセットがあるそうです。
で、後ろの888はおそらくそれぞれ8bitってことかと。

## ImageProxyのこと

CameraXで受け取るImageProxyにどういう風に情報が格納されているのかはドキュメントを見つけられなかったのでここに今回得た情報を残すわけです。

PlanesというのがYUV各バッ

元記事を表示

【Android Studio】ActivityNotFoundExceptionを解決した話。(命名に気を付ける)

#Android で画面遷移ができない

画面を変えたいがどうしてもできない。コードを全部見直したけどできない。
なぜできないのかわからずいろいろ試行錯誤したが、原因は単純だった。

エラー:ActivityNotFoundExceptionの原因は、アクティビティの名前をListActivityとしていたことだった。

リストを表示したいからという浅はかかつ単純な理由でこの名前にしたが、じつはこのクラスはandroid.appの下にすでにあった。
Developers->[ListActivity](https://developer.android.com/reference/android/app/ListActivity,”Developers”)

###解決法
エラーはおそらく命名のせいで、ListWorkActivityと名前を変えたらちゃんと画面遷移できた。

あとは、インテントの引数でListActivityを指定するときにパッケージを指定してもこのエラーは吐かなくなると思われる。

“`java
//名前を変えた場合
Intent intentList = new

元記事を表示

Smart lock for Password on Androidを実装するときに気をつけるところ

Smart lock for Password on Android(以下Smart lock)が出たのは2015年です。

当時実装して、これから新しいアプリにSmart lockを追加するときに気をつけるポイントを2つ記載しておきます。

# Clientが変わった

現在は[CredentialsClient](https://developers.google.com/android/reference/com/google/android/gms/auth/api/credentials/CredentialsClient)ですが、以前は[GoogleApiClient](https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient)でした。
どうもGoogleApiClientで保存した情報はCredentialsClientからは取れないようです(違ったら教えて下さい)

# 別のアプリの情報を取得する手段が変わった

https://

元記事を表示

ビジュアルプログラミングの MIT App Inventor を用いた音の機械学習を利用する Androidアプリ開発【後編:アプリ実装】

## はじめに
この記事は、以下の記事の続きの内容になります。

●ビジュアルプログラミングの MIT App Inventor を用いた音の機械学習を利用する Androidアプリ開発【前編:学習モデルの準備】 – Qiita
 https://qiita.com/youtoy/items/322fc193700bcc4df566

ブロックベースのビジュアルプログラミングを用いて様々な機能を使った Androidアプリを開発できる「[MIT App Inventor(以下、App Inventor と記載)](https://appinventor.mit.edu/)」を使い、音の機械学習を組み込んだ Androidアプリを作る話です。

上記の記事では、Webサイト上で音を録音し、学習モデルを作成&ダウンロードするところまでの話を書きました。今回の内容は、それを使った Androidアプリの開発の話です。

## 完成したアプリが動作している様子
このアプリが完成して動作している様子を以下に掲載します。
ツイートの文章で書いているように、「おはよう・こんにちは・こんばんは」の 3

元記事を表示

Hilt環境でのDefaultViewModelProviderFactoryの実装

# 3行まとめ
– `@DefaultActivityViewModelFactory` および`@DefaultFragmentViewModelFactory` のQualifierを利用してマルチバインディングすると、ViewModelProvider.Factoryを指定しない形でViewModelを生成した際に使用される `DefaultViewModelProviderFactory`の実装が可能である。
– `@HiltViewModel` をViewModelに付与すると、ViewModelのパッケージ名をKeyとした`Map型`のオブジェクトグラフが登録される。
– `HiltViewModelFactory`では、`@HiltViewModel`が付いたViewModelに対しては、内部で定義された`HiltViewModelFactory`が使用され、それ以外のViewModelに対しては、`今回指定するViewModelProviderFactory `か` SavedStateViewModelFactory() `が使用

元記事を表示

ビジュアルプログラミングの MIT App Inventor を用いた音の機械学習を利用する Androidアプリ開発【前編:学習モデルの準備】

【追記】 [「後編の記事」](https://qiita.com/youtoy/items/b241809c93e8fcef0e26)も書きました。

## はじめに(+余談)

以前、スマホアプリをビジュアルプログラミングで開発できないか調べた時や、ビジュアルプログラミングで BLE を扱う方法を調べた際に出てきて、軽く試したことはあったものの本格的には使っておらず、そのまま数年レベル以上の時間が経過していた状態だった「[MIT App Inventor(以下、App Inventor と記載)](https://appinventor.mit.edu/)」。
![MIT_App_Inventor.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/37b0ae0c-eeee-5e23-b126-4b85c3bd1a40.jpeg)

ブロックベースのビジュアルプログラミングを使って様々な機能を使った Androidアプリを開発できたり、作ったものは apkファイルとして出力できたりと、魅力的な

元記事を表示

【過去の私】が作ったグラブルの救援検索アプリを【現在の私】がフルスクラッチしてやった

はじめまして、ユキギガンテと申します。
Androidエンジニアとしてお仕事をしています。
グラブルとアプリ開発が好きです。

## このアプリが誕生した経緯
それは私がAndroidエンジニアになる前のこと。
エンジニアになるために独学していた中で、自分でも何かアプリを作ってみたいと思ったのがきっかけです。noteに当時の話を投稿してみたのでよろしければご覧ください。
[私大文卒エンジニアの成り上がり#note](https://note.com/yuqinta/n/nae6811792a00)
## 旧バージョン
 Xamarin.Android での Switch の使い方

# はじめに
こんにちは、私が説明するのはタイトルにあるようにXamarin.AndroidでのSwitchの使い方です。私が以前Switchを使おうとした時に、Xamarin.Formsの方の解説はたくさんあるのにXamarin.Androidの解説が全くと言っていいほど無かったので書いておきます。
プログラミング環境はVisual Studio 2019です。
# 作ったもの
今回は使い方を知りたかったのでSwitchを切り替えると文字が変わるだけのプログラムを書きました。
54671.jpg 54670.jpgFlutterで文字列を入力できるダイアログを作ろう

Flutterでダイアログを表示するにはshowDialog()メソッドを用いる。
これを用いて「文字列を入力できるダイアログ」が作りたくなった。
ネットで調べまくったおかげでコードができたので、今回はそれを紹介する。

#今回作るもの
aaa.jpg
真ん中のボタンをクリックしたら、
bbb.jpg
こう表示させる(なお、言語設定を省いたので中国語フォントになっています。)

#コード
“`dart:main.dart
import

Android round Icon の設定方法

Asset Studio を利用した icon と roundIcon の追加方法
1. Android Project の res フォルダで右クリック
2. New –> Image Asset をタップ
3. Android 8.0 に対応しているアプリであれば、Icon Type 似て Launcher Icons (Adaptive and Legacy)を選択
4. Name には指定したい名前を
5. Asset Type 似て、Image を選択。選択する Image の解像度によって、その後に生成される各解像度用のアイコンが設定されるみたいなので、綺麗なやつ選んでおいた方が良い・・?
6. 文字が入りきらない場合などは Scaling Reseize でサイズを変更する。
7. 設定が終了したら、Next をタップ
8. 最後に FINISH をタップして完了。

元記事を表示

WebViewの高さがガタガタ変わらないようにしたい

WebViewの使い方として正しいかは分かりませんが、WebViewをRecyclerViewやScrollViewに`android:layout_height=”wrap_content”`で配置して、Viewの高さをコンテンツの高さ分持たせるような使い方をしたくなることがあります。
こういったことをするとき、WebViewがコンテンツを読み込んでレンダリングが完了するまで高さが確定しなくて、他のViewの位置も連動して変わってしまう、ってのが悩みです。一方で、WebViewのようなものを配置すると言うことはアプリの更新を行わずコンテンツを柔軟に変更したい等の要求があるはずなので安易に最低限の高さみたいなものを設定する訳にも・・・という悩ましい問題があります。

まずは、最低限の高さを設定しつつ、それ以上になることを許容するという方法を考えてみましょう。
方法は他にもいろいろあるかとは思いますが、View自体の大きさはonMeasureの中でmeasuredWidth/measuredHeightが設定されることによって決まります。
ですので、基準値をstableHeightという

元記事を表示

AndroidのEditTextで入力された文字がメールアドレスかどうか判定する(Kotlin)

##はじめに
初投稿です。Android開発学習中の大学生です。学んだことをまとめて頭の中を整理するために書きます。なので僕と同じ初心者向けの内容です。

##背景
Android開発で会員登録の機能を作っているときに、入力された文字列がメールアドレスかどうかの判定方法がわからず困りました。いろいろ調べたり知人のエンジニアの方に教わったことをまとめます。

##解決方法
大きく分けて二つの方法があります。
1.正規表現でメールアドレスのパターンを作って、それと入力された文字列が合致するか調べる方法。
2.Androidにデフォルトで存在するPatternsクラスのメソッドを用いて調べる方法。

あくまで僕の解釈ですが、1の方が本質的なやり方で2は飛び道具みたいな感じかなと思いました。ただ1の方が正規表現のことを理解していないとできないのでめんどくさめ。あと抜け漏れが発生しやすいかも。まあでも2のやり方も大元では1と同じことやってそう。

##1の方法について
まず、正規表現の概念と定型パターンは
概念 : [https://userweb.mnet.ne.jp/nakama/](htt

元記事を表示

外部通信は非同期で行いましょう

Firebaseなどの外部APIにアクセスするときは必ず非同期処理でかく必要があります。
以前はMVVMでその方法を説明しましたが、Viewに情報を反映しなくていい場合などの状況下ではViewModelは必要ないので、Activity/Fragmentから直接Repositoryを呼び出すことになります。ほぼMVVMとやり方は変わりませんが忘れっぽい私のためにここに残しておきます。
ちなみに、サーバーサイドの処理は非同期にする必要はありません。

“`Activity.kt
private val userInfoRepository = UserInfoRepository()
private val notificationRepository = NotificationRepository()

GlobalScope.launch {
notificationRepository.save(uid, token)
}

GlobalScope.launch {
// 引数のuidと一致するuidのデータを取得
result = use

元記事を表示

Androidでしてはいけない再帰をする

ふと思った
**「`onCreate()`みたいなところで自分をまた呼び出すようにしたらどうなるだろう?」**
結果はわかりきっているがやってみた
## 実際にやってみた
`onCreate()`と言っておいて`onResume()`に書いていますが気にしない気にしない

“`kotlin:LaboratoryActivity.kt
class LaboratoryActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_laboratory)
}

override fun onResume() {
super.onResume()
Log.d(“korehataihennnamisuwokennsyousurutamenomonodesu,Andr

元記事を表示

Kotlin : Realmを用いてcsvファイルをセットする

##はじめに
Realmのデータベースを用いたデモアプリを作成していたとき、データベースが空の状態で登録や削除を行っていましたが、予めcsvファイルをセットしておく方法も試したので、忘れないように残そうと思います。

##build.gradleの設定
projectレベルのbuild.gradleを開き、以下の文をclasspathに加えます。

“`php
classpath “io.realm:realm-gradle-plugin:10.2.0”
“`
次にapplicationレベルのbuild.gradleを開き、以下のpluginを適用します。

“`php
id ‘realm-android’
“`
ここで、言語がkotlinである場合は以下のpluginを適用する必要があります。このpluginは上記の’realm-android’より上に配置してください。

“`php
id ‘kotlin-kapt’
“`
詳しい方法は[こちら](https://docs.mongodb.com/realm/android/install)

##Realmの初期

元記事を表示

kivyに関する備忘録

Androidアプリを作っている際にpythonでGUIを作成したいなと思ったので、kivyというライブラリを使ってGUIを作成することにしました!
今回はメモ代わりに書いているので、正直書いている項目に順番はありません。

また、今回は`Widgetクラス`と`ウィジェット`を区別して書くことにします。カタカナで`ウィジェット`になっている場合は、ButtonやLabelなどのウィジェットだと思ってください。

# 開発環境
* Visual Studio Code 1.53.2
* MacOS Darwin x64 20.3.0
* python 3.7.7(anaconda)

# 参考記事
こちらの記事がわかりやすかったので、参考にさせていただきました。
[Kivy 超入門(6):動的配置 – float レイアウト](http://iatlex.com/python/first_kivy_6)
[Python: Kivy と Matplotlib でデータセットの確認ツールを書いてみる](https://blog.amedama.jp/entry/2019/07/25/060

元記事を表示

Android: Lottie Animation を任意の位置とサイズにオーバーレイ(ViewOverlay)表示させる

# TL;DR

* Lottie Animation を ViewOverlay に表示することで、View Tree に影響を与えずにアニメーション表示させる
* ViewOverlay は Android 4.3 以上で使えます

# やりたいことと問題点

Button タップを起点として Lottie でリッチなアニメーションを表示させるとき、レイアウト上の Button のサイズよりも広い範囲にアニメーションを表示させたいことがあります。

たとえば、 Twitter Android アプリのお気に入り Button UI はタップするとハートマークよりも広い範囲にアニメーションが表示されています。

![heart1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17931/aa690702-f44a-343f-2a8e-f0c1af7736a2.png)

![heart2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

[Android]ViewBindingを使いたい!

###ViewBindingを使いたい理由
xmlファイルでViewに指定したidを用いてアクティビティやフラグメントを書く際、findViewByIdを逐一書かなくて良きなのと、型安全なので記述ミスがなくなる。数か月くらい前に、話題になりましたが、まだ使えてない!時代のビックウェーブに乗り遅れた!という人向けに書いてみました。実装は、簡単です!
https://developer.android.com/topic/libraries/view-binding

“`gradle
// モジュールの方ね!書けたらSync now!
android {

buildFeatures {
viewBinding true
}
}

“`

適当に、Viewを配置して…

“`xml

元記事を表示

react-native-webview で表示するページを Android の戻るボタンで戻れるようにする…のはわりと簡単だけど「戻れるかどうか」をちゃんと判定するのは結構難しいという話

## 概要

単純に「戻る」だけならシンプルに実装できますが、「これ以上戻れるかどうか」により処理を分けたい場合への対応について、 SPA 対応まで含めて説明している記事がなさそうだったのでまとめました。

「Android の戻るボタン」と書いていますが、 UI で「戻る」ボタンを表示しつつ、それ以上戻れないときは非アクティブにするといった対応にも応用できると思います。

## 1. 単純に戻す

WebView の ref を使って以下のようにすれば戻す操作はできます。

“`CustomWebView1.tsx
import {useFocusEffect} from ‘@react-navigation/native’;
import React, {useRef, useCallback} from ‘react’;
import {BackHandler} from ‘react-native’;
import WebView from ‘react-native-webview’;

type Props = {
uri: string;
};

export co

元記事を表示

[Android]Action BarとUINavigationの連携がうまくいかない

#連携?
UpボタンがDestinationの遷移時に自動的に表示されたり、labelが自動的にタイトルに設定されたりすることです。

#原因
初期化処理を
onCreate(savedInstanceState: Bundle?)
ではなく、
onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?)
で行っていたことが原因でした。

ブレークポイントを設定してデバッグすればもっと早く見つかったかもしれません。

元記事を表示

OTHERカテゴリの最新記事