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

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

Webkit で WebView のダークテーマ対応をする

# 概要
WebView でダークテーマを適用する方法について述べます。

## なぜやるのか?
WebView でダークテーマに対応するには、従来だと手間のかかる実装をする必要がありました。最近出た [Webkit 1.2.0](https://mvnrepository.com/artifact/androidx.webkit/webkit/1.2.0) を使えば、そうした手間を削減することができます。

—-

# 導入

## 依存の追加
Webkit の依存を追加します。1.2.0 以上を利用してください。

“`groovy:app/build.gradle
dependencies {
implementation “androidx.webkit:webkit:1.2.0”
“`

## WebView に適用
WebViewFeature で “FORCE_DARK” に対応しているかを確認し、している場合に [WebSettingsCompat](https://developer.android.com/reference/kotlin/andro

元記事を表示

Android上でAzure Ink Recognizerを使って手書き文字認識する

# はじめに
スマホやタブレットの上で、図形や文字を混ぜ書きしつつも、文字部分に関しては、裏で手書き文字認識した結果をキーワードなりタグとして記録しておき、あとで検索の時に使いたい、なんてユースケースはよくあるかと思います。

そんな時に使えるのが、Azure Ink Recognizerです。ここではAndroid JavaアプリケーションからInk Recognizerを使う方法をご紹介します。

なお、私はInk Recognizerの担当者ではないので、ここでの記述は、とあるサンデーフルスタックエンジニアの独り言であって、特定のベンダーの保証する内容ではありません。

# 事前準備
Azureのアカウントを用意します。Ink Recognizer(本記事執筆時点ではプレビュー)リソースを作成し、手元にキーとエンドポイントを用意しておきます。

# 利用方法
GitHubに上がっている Azure-Samples/cognitive-services-java-sdk-samples を git cloneして、InkRecognitionディレクトリをAndroid Studi

元記事を表示

[Android]Flow と Room を組み合わせたサンプル

# はじめに

Flow と Room を組み合わせたサンプルを作成します。
アーキテクチャは Google が推奨している MVVM で作成を進めます。

![img](https://developer.android.com/topic/libraries/architecture/images/final-architecture.png)

# TL;DR

– Flow と Room を連携するときは Dao の戻り値を Flow にすればよい
– Room から取得した Flow は `asLiveData` で LiveData に変換できる。
– Flow を LiveData に変換したあとは、通常の LiveData と同じで Observe して利用する。

# Setup

アプリケーションの作成に必要となる、
Koin・Room・Flow(Coroutines)のライブラリをインストールする。

| ライブラリ | バージョン | 説明 |
| ——- | ——- | ——- |
| Koin | 2.1.3 | DIライブラリ |

元記事を表示

【Android】OptionsMenuでMenuItemをグレーアウトにする

# 概要
ある条件のときにOptionsMenuの一部のMenuItemをグレーアウトにして、タップできないようにしてみたので備忘録として記載

# OptionsMenuの実装
“`Java:MainFragment.java
private boolean isEnable = true;

@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.menu_item, menu);
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
AppCompatActivity activity = (AppCompatActivity) getActivity();
int id = item.getItemId();
switch (id) {
case R.

元記事を表示

【Kotlin】kotlinx.serializationを使ってjson parseをやってみる

# kotlinx.serializationとは
>Kotlin serialization consists of a compiler plugin, that generates visitor code for serializable classes, runtime library with core serialization API and JSON format, and support libraries with ProtoBuf, CBOR and properties formats.

Serialize可能なクラスのvisitor codeを生成するコンパイラプラグインとcore serialization APIおよびJSON形式のランタイムライブラリで構成している。

つまり、Kotlinで作られたSerializerということですね。

また、そのほかの特徴としては
>・Supports Kotlin classes marked as @Serializable and standard collections.
・Provides JSON,

元記事を表示

Androidの充電不良が起きた時の対処法

#始めに……

まず、断らなければいけない事があります…
***そうです、qiitaの規約に多分アウトであることです。***
それでも、一応カテ枠の中には収まっていると思うので、よろしくお願いします。

#Androidの充電不良
自分のケータイは、Xperia_XZ1なのですが、今しがた充電不良が発生しました。
皆さん、誰でも長い間ケータイ使われてると、

* ガサツに扱っていた為、基板がズレる

* 経年劣化による不良

のどちらかで、充電口の不良が起きてると思われます。。。
今回は、***前者の方向で不良が起きた方向け***への記事となります。

***※上のリストをトラブルシュートしたい方は、***
***次項目でこの記事が使えるかどうか判断お願いします。***

#充電不良を凌げるかどうか、判断されたい方↓

まず、***充電口を強く抑え***、一瞬でも充電中かどうか判断します。
もしここで、充電中の気が有ったら、こちらの記事は使えるかと思います。
***駄目だったら、直ぐにキャリアにご相談願います(この記事は使えません)***

#本題(凌ぎ方)

「1日だけ、

元記事を表示

【Android】RecyclerView in RecyclerViewの罠【Epoxy】

# はじめに
RecyclerView、便利だよね。
単純なリストだったらサンプル見れば誰でも簡単に実装できるし、Epoxyなんて使った日にはもうめちゃくちゃわかりやすく書けちゃう。

そんなRecyclerViewだけど、こないだRecyclerViewの中にRecyclerViewを入れる実装をした結果、二つの不具合に遭遇した。
多分次やった時も同じ轍を踏みそうな気がするので、忘れないよう備忘録がわりに記事を残しとく。
ちなみにEpoxy使う。

## RecyclerViewのおさらい

簡単に今回関係するところだけかいつまんでおさらい。
そもそも、RecyclerViewはViewのオブジェクトを再利用して表示している。

画面外に出たViewHoldeのオブジェクトは中のデータを入れ替えて再利用される。
これにより

元記事を表示

GitHub Actions でapkファイルを検査する

アプリを開発していると、導入したライブラリの影響等で知らぬ間に意図しないpermission要求が含まれていたり、バイナリのサイズが大きくなってしまうことはよくあります。

> 例えば `com.android.installreferrer:installreferrer:1.0` の追加には、意図しないパーミッション要求が追加されてしまう現象がありました。

master ブランチへのマージを契機に、これらをチェックする GitHub Actions のアクションを書いてみました。Android SDK ツールに含まれる [apkanalyzer](https://developer.android.com/studio/command-line/apkanalyzer?hl=ja) を利用しています。
(ビルド時間が気にならないなら、マージされてしまってからチェックするのではなく、プルリクエスト作成時にチェックした方がよいと思います。)

“`yaml
name: Inspect apk

on:
push:
branches:
– master

en

元記事を表示

マリオカートツアーを毎日自動的に起動してログインボーナスをもらう

#用意するもの
1. Android実機(エミュレータでもいいが動かないかも)
2. adbがインストールされた端末

#準備
1. Android実機にマリオカートツアーをインストールして起動→初期設定まで済ませる
2. Android実機を開発者モードにする
3. adbコマンドで実機に接続しておく(初回に接続を許可するか聞かれるため)

#起動~終了
“`shell
adb connect 192.168.0.xx
adb shell am start -n com.nintendo.zaka/com.nintendo.android.PermissionActivity
sleep 300
adb shell am force-stop com.nintendo.zaka
“`

#懸念事項
1. 起動途中に最新データのダウンロードが入った場合はどうすべきか検討中(Appium使えばいけるか?)

元記事を表示

Xamarinを勉強し始めたので覚えたことを記録するメモ

#はじめに
Xamarinを使ってマルチプラットフォーム開発をやってみたくなったので、勉強したことを記録として残す(徐々に追記)

## Xamarinとは
iOS | Android | Windows など複数のプラットフォームで動作するアプリをC#を使って構築することができるライブラリ

– Xamarin.iOS
– Xamarin.Android

を導入すると、iOSとAndroidのマルチプラットフォーム開発ができる。
例えばVisual Studioに導入すれば、ついでにUWPアプリも作れる。

## Basic Class Library
各プラットフォーム間で共通的に使えるライブラリ。
基本的には、このライブラリを使ってアプリを構築し
個別の対応が必要なものについて、個々のプラットフォームの
ライブラリを使うことで共通化を目指すようだ。

## iOS版のアプリについて
やはりiOS版のアプリについてはMacとXcodeが必要であった。
Mac上のiOSシミュレータは`Xamarin.iOS Build Host`によりペアリングすることで
Windows上のVis

元記事を表示

flutterの環境構築しようとしたらハマった話

最近(2020年2月くらい)、flutterの環境構築でこんな感じでハマった人はいませんか??

“`
Doctor summary (to see all details, run flutter doctor -v):

[!] Android toolchain – develop for Android devices (Android SDK version 29.0.3)
✗ Android license status unknown.
Try re-installing or updating your Android SDK Manager.
See https://developer.android.com/studio/#downloads or visit https://flutter.dev/setup/#android-setup for detailed instructions.

*他の項目は省略
“`
# Android toolchainのエラーが消えへん

本来であれば、こちらのコマンドで解決するはずなのです

元記事を表示

DroidKaigi 2020 アプリでの学び【Kotlin Coroutines Flow 編】

## この記事なに?
Droidkaigi 2020 アプリに commit したので、そこで得た学びや感想を書いた記事です。
いろいろ書きたいことがあったので、分割して書きます。
僕のモチベが続く限り続きます。
ちなみに初めての OSS 活動でした ?

僕が取り組んだ Pull Request はこの2つになります。

– [Thumbs\-up function ? by mkeeda · Pull Request \#626 · DroidKaigi/conference\-app\-2020](https://github.com/DroidKaigi/conference-app-2020/pull/626)
– セッションへのいいね機能を実装しました
– medium の crap 機能のように連打できる機能です
– [\[iOS\] Fix error if build directory is already exists by mkeeda · Pull Request \#805 · DroidKaigi/conference\-app\-2020](ht

元記事を表示

wrap with new widget が消えた (Flutter / IDE)

Android Studioで電球マークを押しても、Wrap with new widgetが出てこなくなり、Adjust code style settingsしか出てこなくなった時の解決方法

どこにあるかわからず、結構うざかったので、解決した時のURLを貼っておきます。

解決方法
(Mac)Preference → Editor → intentions → Quick assist powered by the Dart Analysis Server..を有効化

https://github.com/flutter/flutter-intellij/issues/2448

![スクリーンショット 2020-03-07 11.36.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378998/21be4830-a5b7-cea5-67fe-9088273450cc.png)

元記事を表示

Androidアプリでカスタムフォントを使いたい!

#目的
標準フォント以外のフォントを使う

#環境
Android Studio 3.6.1
Build #AI-192.7142.36.36.6241897, built on February 27, 2020
ランタイム・バージョン: 1.8.0_212-release-1586-b04 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
GC: ParNew, ConcurrentMarkSweep
Memory: 1246M
Cores: 4
Registry: ide.new.welcome.screen.force=true

#カスタムフォント使用の手順
###①カスタムフォントを用意
なんでもいいんですが、SourceHanSerifを使っていきます。
SourceHanSerifとは:https://source.typekit.com/source-han-serif/jp/
直ダウンロードリンク:https://github.com/adobe-fonts/source-ha

元記事を表示

OculusQuestのランタイムロード

# はじめに
OculusQuestでランタイム時に端末からVRMファイルをロードし、動的に生成する方法を記述します。

# 環境など(開発環境、実行環境)
– Unity 2019.2.17f1
– UniVRM 0.55.0
– Oculus Integration 13.0
– AliciaSolid.VRM https://3d.nicovideo.jp/works/td32797

# コード
“`cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRM;

public class LoadFile : MonoBehaviour
{
GameObject VRM;
string AndroidFilePath;
string VRMDirectory = “/VRM/”;
string filename = “AliciaSolid.vrm”;

void Start()
{
And

元記事を表示

Kotlin coroutine入門 ② ~ coroutine scope & jobについて~

[Kotlin coroutine入門①](https://qiita.com/ymkit/items/f0e0b2e8644e83bcace1)の続きです。
前回は、coroutineとは?から仕組み、launch、async、awaitの動きをみました。
今回は、coroutineをandoridで扱う上で知っておきたい coroutine scope & jobについて書いていきます。

# CoroutineScope &CoroutineContextとDispatchersを理解する

### CoroutineContext
CoroutineContextは、要素のセットです。 coroutineの文脈や環境の状態を表す値の集まりで、キーと値のペアとして情報を保持しています。主な要素としてはcoroutineのjobとDispatchersです。

端的に言うと Coroutineを利用するための情報が全て入っている。ここでCoroutineが実行される

### Dispatchers
Dispatcher はコルーチンをどのスレッドで実行するかといったことを決定し

元記事を表示

オレオレ Kotlin Extensionライブラリを作ってみた

### ライブラリ作っちゃった
ここ数ヶ月の間でフルKotlinの新規Androidアプリ開発に携わっており、ktxやExtensionの知見が貯まってきたのでライブラリ作っちゃおっかなーってことでやっちゃいました!

[CommonKtx](https://github.com/sasa-nori/CommonKtx)

まぁ、名前に関してはツッコミは不要ですw

### どんな内容なの?
よくある実装をExtensionで実装してます!

例えば、こんな感じでダブルクリック禁止のクリックリスナーをセットできたり

“`Kotlin:MainActivity.kt
button.setOnSingleClickListener {
// run
}
“`

こんな感じにSharePreferencesの値を扱えたり
_※委譲プロパティでゴニョってるよ!_

“`Kotlin:MainActivity.kt
val pref = Preferences(this)
val isFirstLaunch:Boolean = pref.isFirstLaunch
“`

こん

元記事を表示

JINS MEMEを使えるようになるまでの道のり(Android版)

Android初心者がJINS MEMEのデータを取得できるようになるまでの道のりを簡単にメモしておきます。

# 参考にしたところ
とりあえず以下を参考にしています。
– [JINS MEME SDKへようこそ](https://jins-meme.github.io/sdkdoc/)
– [YAZ Engineer BLOG](https://www.yaz.co.jp/tec-blog/スマートデバイス/496)

# 環境
開発環境は以下でした。
– JINS MEME SDK: 1.3.0
– Android Studio: 3.6

# 前置き
– SDKをダウンロードする
とりあえず、SDKをダウンロードしておくこと。
– アプリを登録する
[JINS MEME DEVELOPERS](https://developers.jins.com/ja/login/?goto=/apps/)にログインして、アプリを登録しておくこと。
登録したアプリのIDとSecretをどこかに記録しておく(あとで使います)。

# ライブラリの準備
– Android Stud

元記事を表示

Androidで道案内アプリケーションを作る

AndroidアプリでGPSを扱い始めると誰しも一度はGoogleMapに代表されるような地図アプリケーションを作りたいと思うのではないかと思います。
しかしGoogleが提供するGoogle Maps API(無償版)には利用目的やAPI呼び出し回数の制限があります。
今回は、Google Maps APIを使用せずにAndroid上で動作する地図アプリケーションを作成します。

# 動作検証環境
Aquos R3
API Level 26

#地図データの取得
地図データには[OpenStreetMap](https://openstreetmap.jp/)というオープンソースの地図プロジェクトのものを使用します。
OpenStreetMapの地図データをAndroidで使用するために、osmdroidというライブラリを使用します。

まずプロジェクトを作成したら、ルート直下のbuild.gradleに以下の一文を追加します。

“`build.gradle
repositories {
jcenter()
mavenCentral() //追記
}
“`

元記事を表示

いつの間にかメーラーを起動するIntentの推奨形式が変わっていて件名や本文が入力されなくなっていたので対応した

## 発覚の経緯
普段作っている個人アプリでは、ユーザーからのお問い合わせを送ってもらうためにメールを使っています。

機能としてはただメーラーを開くだけでなく、件名や本文に任意の内容を自動で入力するようにすることで基本的な情報の問診の手間を省いていました。

3年位は問題なくお問い合わせメールが届いていたのですが、ある時から急に件名と本文の入力がないメールが来るようになりました。

最初のうちはユーザーが消してから送ってきたのかなと思っていたのですが、日に日に多くなってくる様子から何か起きていると判断しました。
手元で確認したところ、読みどおりにメールアドレスしか入力されていないメールがGmailで生成されるようになっておりました。

## 修正方法
### before
メールを起動するIntentは随分昔から使っている、インターネットのどこからコピーしてきたかも思い出せないものでした。
このコードでも少なくともいっときまでは問題なく動いていたはずです。

“`kotlin
fun createMailIntent(address: String, subject: String

元記事を表示

OTHERカテゴリの最新記事