Android関連のことを調べてみた2022年01月15日

Android関連のことを調べてみた2022年01月15日

Observable.intervalみたいに一定間隔実行をKotlin Flowで書きたい

# この記事で紹介すること
Observable.intervalみたいな一定間隔での処理実行をKotlin Flowで書きたい。
`flow.interval`みたいなオペレータがなかったので、どうしようかなと。

“`kotlin
// これをKotlin Flowで書きたい
val disposable = Observable.interval(100, TimeUnit. MICROSECONDS).startWith(0L)
.subscribeOn(Shedulers.computation())
.subscribe {
// 定期実行したい処理
getHogeHogeData()
}
“`

# やり方と解説
### Flowの中でdelay関数を使う
解説と言いつつすごい単純で申し訳ないんですが、ループするflowを作って、flowの中にdelay関数を呼んであげれば似たような動作になりました。

“`kotlin
// 0.1sec間隔で処理実行
private fun i

元記事を表示

OPPO Reno5 Aでマイナンバーカードを読めない問題を考える

#はじめに
人気スマホのReno5 Aを買いました。
カメラ性能など素晴らしいプロダクトだと思っているのですが一点問題があります。

:::note info
私のマイナンバーカードを読み取れないアプリがある
:::
価格コムやTwitterによると このスマホで読み取れてる人、読み取れない人がそれぞれ居るようです。
また他のスマホでも同様の結果が出てることがあるようです。

私の環境においてGooglePlay で “`マイナンバーカード“` と検索して
上位に出てくるアプリでの検証結果は下記です。

| アプリ名 | 制作 |結果 / エラー番号 |
|—|—|—|
|[マイナポータル](https://play.google.com/store/apps/details?id=jp.go.cas.mpa)| デジタル庁 | ログインできる(読める) |
|[マイナポイント](https://play.google.com/store/apps/details?id=jp.go.soumu.mkpf.mkpfmypage)|総務省自治行政局地域情報化企画室|MKC

元記事を表示

【Android studio】ImageViewへ容量の大きい画像を読み込む方法

#状況
実機で操作時にImageViewへ2MB以上のjpg画像を挿入しようとしたところ、アプリが落ちてしまった。
メモリ不足に陥っている可能性が考えられた。

#対処方法
1. jpg画像をBitmapに変換、
2. Bitmapのサイズを調整。
3. ImageViewに張り付ける。

“`kotlin:MainActivity.kt
val bitmap = adjustImage(resources, R.drawable.imagefilename)
menuImage.setImageBitmap(bitmap) //・・・3

private fun adjustImage(res: Resources, resID: Int): Bitmap {
var bmp = BitmapFactory.decodeResource(res, resID) //・・・1
return createScaledBitmap(bmp, 320, 264, true) //・・・2
}

“`

#懸念事項
BitmapFactory.decod

元記事を表示

ConstraintLayoutでつまずきやすいViewが重複した時の解決策

#はじめに
ConstraintLayoutでつまずく中でも頻出するのがViewの重複問題、押出し問題かと思います。
そこで、今回自分が役立った二つの要素を紹介したいと思います

###layout_constrainedWidth

“`xml:

WebViewで基本認証させる際の注意点


## 最初に結論

AndroidアプリのWebViewで基本認証させようと思って検索するとよく見かけるサンプルコードについて、これではコンテンツに埋め込まれている外部サイトのオブジェクト(画像とかロギングツールとか広告オブジェクトとか)へ認証情報を流してしまうかもしれないので、注意が必要。
つまり、**認証情報を提示するホスト/URLを、きちんと制限しましょう。**という至極当然の結論。


## よく見るサンプルコード

“`java
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
handler.proceed(“ユーザ名”, “パスワード”);
}
});
“`

つまり、WebViewClientクラスの「onReceivedHttpAuthRequest」をオーバーライドして

元記事を表示

記事というよりただのメモ?

Androidアプリで複数フラグメントで共有のViewModelを持つ方法について

その前にViewModelの概念についてよくわからないまま使用していたので、いろいろ調べたら以下の単語が出てきた
・activityViewModels
そのアクティビティで定義されてるViewModel?
・viewModels
こいつはなんだ???どうやって使うんだ?
・navGraphViewModels
こいつはnav_graph.xmlで同じnavigation内に定義されているfragmentの時に使えるらしい。

testFragmentで以下のような実装をしてみた。

private val sharedViewModel: SharedViewModel by activityViewModels()
private val test2ViewModel: Test2ViewModel by activityViewModels()
SharedViewModelはMainActivityで定義されている
Test2ViewModelは別のfragmentで生成されたViewMode

元記事を表示

【kotlin】超簡単なMVPを実装してみた、①Presenterの実装

# MVPとは?
Androidアーキテクチャの一つ。
ActivityやFragmentで行っていた処理を以下の三つの役割に分ける。

・Model(データに関する処理を行う)
・View(画面に関する処理、クリック等のイベントを拾ってPresenterに送る処理を行う)
・Presenter(Viewからイベントを受け取り、Modelを操作したり、Viewに伝え画面操作を行うロジカルな処理を行う)

**[メリット]**
・Activity,Fragmentの肥大化を防げる。
・テストがしやすい。

# 実装内容
Presenterまで実装する。
EditTextに文字を入力してボタンを押したら、下部のTextViewに表示させる(超簡単)。
![presenter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784089/327d668f-79fd-381d-ac6a-bec60fe05c83.png)

# 実装
**[レイアウト]**
①editText
②button
③textView

元記事を表示

gradleのバージョンを上げないで”Could not determine java version from”を回避する方法

このエラーが出た場合はgradleのバージョンを上げてやれば良いのですが
なんらかの理由でgradleのバージョンを上げられない場合の回避策です。

この方法はandroidで署名なしreleaseビルドを作成する際に使いました。

## 古いjavaをダウンロードする

“`
curl -O https://corretto.aws/downloads/resources/8.312.07.1/java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.deb

sudo apt install ./java-1.8.0-amazon-corretto-jdk_8.312.07-1_amd64.deb
“`

## 古いjavaを指定してビルドする

“`
JAVA_HOME=~/.jdks/corretto-1.8.0_312 ./gradlew assemble
“`

元記事を表示

キーボードの表示、非表示を切り替える方法

#はじめに
キーボードの表示、非表示に関しては、ほぼ全てのアプリで実装が必要になると言っても過言ではない要件ですよね。
いつも調べて思い出すことが多いので、簡単にまとめておこうと思います。

#キーボードの表示
表示する際の実装は以下

“`ViewExtensions.kt
fun View.showKeyboard(
flag: Int = 0
) {
(context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)
.showSoftInput(this, flag)
}
“`

#キーボードの非表示
非表示にする際の実装は以下

“`ViewExtensions.kt
fun View.showKeyboard(
flag: Int = 0
) {
clearFocus()
context.getSystemService()?.hideSoftInputFromWindow(windo

元記事を表示

モバイルシステム技術検定(MCPC)2級の対策

皆様

お久しぶりです。satolabです。
最終更新から1年以上の月日が流れました。現在私は某IT企業でモバイル系のインフラエンジニアをしております。

この1年は慌ただしく、qiitaをはじめ情報発信や趣味の開発に中々時間を割けておりませんでした。

現在も四苦八苦の日々ですが、少しずつ情報発信の方も再開出来ればと思っております。

前置きが長くなりましたが、今回はちょっとニッチな資格である”MCPC2級”の対策について紹介したいと思います。

私は11月に受験し、無事合格出来ました。

##概要

モバイルシステム技術検定(通称:MCPC)は、モバイルシステムの提案、構築、運用のために必要となる知識とそのレベルを明示することによって、IT関連技術者の学習意欲の喚起を行い、その学習成果を検定(試験)により測定することが可能となります。
(引用: https://www.mcpc-jp.org/kentei/gaiyou.html)
試験は年に二回あり、後半の回はCBT方式で受けることができます。私は最寄りのテストセンターで受験しました。
なおボーダーは公開されていません。

##対

元記事を表示

Android開発におけるドキュメント作成”Dokka / KDoc”の導入手順

# Dokkaとは

“KDoc”形式で記載したコメントを、Javadocと同様な形でドキュメントを作成できる。
JavaとKotlinが混在したプロジェクトのドキュメントも生成可能

https://github.com/Kotlin/dokka

# 導入

“` project/build.gradle
buildscript {
ext {
dokka_version = “1.6.10”
}
dependencies {
classpath “org.jetbrains.dokka:dokka-gradle-plugin:${dokka_version}”
}
“`

“` app/build.gradle
apply plugin: “org.jetbrains.dokka”

android {}
dependencies {}

// dokkaHtml 用の設定
dokkaHtml.configure {
outputDirectory.set(new File(“${buildDir}/dokkaHtml”))

元記事を表示

Gradle 6.7.1以下 -> 6.8以上 にアップデートするとbuild.gradleのdependenciesのexcludeの挙動が変わる

# 概要
androidアプリを作成中、gradleをアップデートしたら、それまで問題なく使えていたアプリソース中のkotlinファイルでの`import kotlinx.coroutines.CoroutineDispatcher`に対して`Unresolved reference: CoroutineDispatcher`とエラーメッセージがつくようになってビルドができなくなった。 
アプリケーションモジュールのbuild.gradleのdependenciesに`implementation “org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$kotlin_coroutine_ver”`を追加してやったところビルドが通るようになった。

## 理由
アプリで使っているcoroutineライブラリとpagingライブラリに入っているそれとがバージョンが違っていたのでpagingライブラリのほうから抜くためにアプリケーションモジュールのbuild.gradleのdependenciesで以下のようにしていたのだが、gradle 6.

元記事を表示

集中力を維持するためのポモドーロタイマー

学内の学生主体で進めるプロジェクトで「ユーザの集中力を持続させるシステム」を構築する機会がありました。

その際にポモドーロタイマーを用いて休憩時間を管理してくれるアプリを作成致しましたので、その内容について少しだけ触れさせて頂きます。

まず今回使用したのはReact Nativeです。iosとandroidの双方に対応できるクロスプラットフォームフレームワークを使用したいという理由から使用しました。

![Screenshot_20220110-015520_project1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2488482/7170aeca-6619-6bd5-c219-5c5e1918db46.jpeg)

上の画像が実際のアプリ画面です。
左上にタスクに取り組む時間を、右上に休憩時間を打ち込み、開始ボタンを押します。

指定した時間が過ぎると端末が振動し、テキストが変化します。

![Screenshot_20220110-015956_project1.jpg](https://

元記事を表示

Guide to app architectureからプラクティスを拾うメモ UIレイヤー編

https://developer.android.com/jetpack/guide?hl=en

上記から拾ってメモしておきます :pencil:

ちょっと分かりにくい部分として、最初に書いておきたいのが、UIレイヤーとUIは別で、UIレイヤーにはState holder(ViewModelなど)も含み、UIやUI elementはActivityなどを指すようです。

https://developer.android.com/jetpack/guide/ui-layer?hl=en より

(あとでまとめ記事的なのを作るかも?)

## Activityなどのアプリのコンポーネントにアプリのデータや状態を持ってはいけない

> Given the conditions of this environment, i

元記事を表示

EditTextのカーソルの行の位置を取得するには

EditTextのカーソル位置を取得するのは、調べたりするとすぐ出てきたりしますが、カーソルが何行目なのかを取得する方法が、無かったので忘れないようにする為、書いておく事にします。

# EditTextのカーソルの行の位置を取得する方法

“`
val layout: Layout = binding.editText.layout
val offset: Int = binding.editText.selectionEnd // カーソルの位置
val line = layout.getLineForOffset(offset) //引数に指定したoffsetの行番号(カーソルが何行目か)
val primaryHorizontal = layout.getPrimaryHorizontal(offset) // 引数に指定したoffsetの水平位置が返ってきます(カーソルが左端からの水平位置)
“`

EditTextのLayoutを使う事で、取得することができました。

# カーソルを上に移動させる方法

“`
binding.editText.setSele

元記事を表示

flutter_native_splash使ってみた

## 要約
– Splashとは?
– flutter_native_splashを使ってみる
– Android実装時の注意点
– OS 12の注意点
– Flutter2.5以上ではAndroidManifestの`meta date`を消す
– 感想
– 参考記事

## Splashとは?
アプリを立ち上げるときに一瞬表示される画面のことです。

## flutter_native_splashを使ってみる
`pubspec.yaml`にライブラリと`flutter_native_splash`の設定を追加する

“`pubspec.yaml
dependencies:
flutter_native_splash: ^1.3.3

flutter_native_splash:
color:

元記事を表示

アクティビティライフサイクルの大まかな流れを把握する

# この記事は

**[Android 公式 Doc のアクティビティライフサイクル](https://developer.android.com/guide/components/activities/activity-lifecycle#alc)** に、図など視覚情報を補足したもの。

**内容はあくまで参考にとどめてください**

以下のサンプルアプリ(仮称: `Lifecycle` アプリ) を使う。

* `Lifecycle` アプリには `MainActivity`, `SettingActivity` が存在する
* `Lifecycle` アプリ初回起動時は `MainActivity` が起動する
* `SettingActivity` は
* `MainActivity` から `startActivity` で起動する
* `finish()` で終了する

| MainActivity | SettingActivity |
| :–: | :–: |
| ![main_activity.png](https://qiita

元記事を表示

Expo (React Native) でViewを画像に変換してデバイスに保存する

# はじめに

React Nativeで新作アプリを作りました。

元記事を表示

VibratorManager を利用する

# Context.VIBRATOR が Deprecated に
API Level 31 (Android 12) より `getSystemService(Context.VIBRATOR)` が **Deprecated** になりました。
以降は同じく API Level 31 で追加された `getSystemService(Context.VIBRATOR_MANAGER_SERVICE)` の使用が推奨されます。

# Vibrator Manager の使い方

`AndroidManifest.xml` に次のパーミッションを追加します。

“`xml:AndroidManifest.xml

“`

つづいて `MainActivity.kt` に処理を記述します。
サンプルではこまかな点まで考慮しておりませんのでご了承ください。

“`kotlin:MainActivity.kt
class MainActivity : AppCompa

元記事を表示

AndroiderのiOS奮闘記~UIKitとは~

#この記事は
iOSのキャッチアップを余儀なくされた生粋のAndroiderの奮闘日記です。
単発の記事になりますが、ご容赦ください。

#UIKitとは
ドキュメント読んでいきます。
>Construct and manage a graphical, event-driven user interface for your iOS or tvOS app.

iOSとtvOS用に作られたもので、イベント駆動なインターフェースを提供してくれるフレームワークのようです。
iOSシステムとのインタラクティブを管理してくれるようです。

全然知らなかったけど、Apple社はテレビ用のOSも出してるんや。

注意書きとして、UIKitのクラスはメインスレッドのみで使用するのがルールみたいです。

#SwiftUIとの違いは
SwiftUIもiOSでUIを描画するためのフレームワークですが、新しいものみたいです。
ただ、一つのプロジェクトに両者をブリッジできるようなので、組み合わせて使える。

AndroidでもJetpackComposeを既存のものに組み込めるので、それと同じかなと。

#

元記事を表示

OTHERカテゴリの最新記事