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

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

WebViewの設定について

# はじめに
今回はwebViewを触る機会があり少し調べたりもしたので、そこで調べて見つけたものを記事にします。

# 設定一覧

**JavaScriptを有効にする**

“`
webView.settings.javaScriptEnabled = true
“`

**リンク先をブラウザにせず、WebView内でリンクさせる**
“`
webView.webViewClient = WebViewClient
“`

**スクロールバー領域を消す**
“`
webView.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY
“`
または、
“`
webView.setVerticalScrollbarOverlay(true)
“`

**ローカルのHTMLファイルを表示させる**
“`
val padh = “/data/index.html”
webView.loadUrl(“file://$padh”)
“`
ローカルのファイルをwebViewに表示させるには http:// の代わりに file:// に

元記事を表示

親子関係のあるFragment間でactivityViewModelsを使わずにviewModelsを使ってViewModelを共有する

[Googleの公式ドキュメント](https://developer.android.google.cn/guide/fragments/communicate?hl=ja#viewmodel)では、`activityViewModels`を使ってFragment間でViewModelを共有する方法が紹介されています。しかし、どうにか`viewModels`だけで済ませられないかと思い、**親子関係のあるFragment間**であれば実現できそうなので紹介します。

## 実装

早速見ていきましょう。ここでは子のDialogFragmentを親のFragmentで生成して呼び出す場合を想定しています。

### 親Fragment

ViewModelの生成には`viewModels`を使います。子Fragmentを生成する際には`childFragmentManager`を渡してあげます。

“`kotlin:ParentFragment.kt
class ParentFragment : Fragment() {
val shareViewModel by viewM

元記事を表示

テーマ別アプリアイコン表示方法

今回はテーマ別アプリアイコンの端末での設定方法を紹介していきます。

まずは、端末の設定を開きます。

Walloaoer&Style(壁紙とスタイル)を選択します。
![Screenshot_20220918_184757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/339ee1ef-af02-0d3a-91df-6a6adac981eb.png)

そしたら下にスクロースをして、テーマアイコンのスイッチをONにします。

![Screenshot_20220918_184902.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/3fbd3c65-daf5-bd63-cd4c-5624011dc873.png)

そうするとこのようになります。

![Screenshot_20220918_184247.png](https://qiita-image-store.s3.ap-north

元記事を表示

vistaでandroid studio その25

# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。

# 練習問題
jniでopenglでコンパイル済みライブラリーを使え。

# 方針

– ライブラリーは、assimp使う。
– ndk-build使う。

# 写真

![device-2022-09-18-055504.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/fbfae074-a664-d4e2-5d3a-42352e742a9a.png)

# Android.mk

“`

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE:= libassimp1
LOCAL_SRC_FILES:= $(LOCAL_PATH)/../externals/assimp-3.0/libs/armeabi-v7a/libassimp.so
LOCAL_EXPORT_C_INCLUDES := $(L

元記事を表示

Oculus Questのブラウザを自分好みに拡張する

Android版のChromeは拡張機能をインストールできないので,操作を自動化したり,サイトにちょっとした機能追加をしたいときに不便です.ChromiumをベースにしているOculus(Meta) Questのブラウザも同様の問題があります.

最低限,動画サイトで倍速再生したり,広告をブロックしたり,ファイルをGoogle Driveに保存したりできないと不便なので,[Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) を使って特定のURLにアクセスした時にJavaScriptを実行するツールを書いたら便利になりました.

やったことは単純でこれといって面白い部分もありませんが,思ったより面倒だったのでまとめておきました.

# GoでDevTools Protocolを使う

Goで実装するため[Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) を使うためのライブラリを

元記事を表示

Androidアプリ忘備録1

Android Studioにおける
kotolinプロジェクト文法について忘備録です。
# HTMLにおけるDOCTYPみたいなもの
“`kotlin

“`
# LinearLayoutの書き方
“`kotlin



“`
# ListViewの書き方
“`kotlin

元記事を表示

【APK, Android Studio】WindowsでAndroidアプリのAPKを抽出・インストールする方法

## 環境
+ Microsoft Windows 10.0.22000.978
+ Android 9

## 目次
前半:[APKを抽出する手順](#apkを抽出する手順)
後半:[APKをインストールする手順](#apkをインストールする手順)

## APKを抽出する手順
Android Studioをインストール済みの場合は [2. abdコマンドのパスを通す](#2-abdコマンドのパスを通す) へ。

### 1. SDKのインストール(Android Studioをインストールしていない場合)
[Android Studio 公式サイト](https://developer.android.com/studio/?hl=ja)からAndroid Studio(Download Android Studioをクリック)またはコマンドラインツール(Download optionsをクリック → Command line tools only)をダウンロード

### 2. abdコマンドのパスを通す
Android Studioをインストールすると、以下の場所に `adb.

元記事を表示

FlutterでAndroidの通知チャンネルを作成する

# 概要
通知チャンネルをFlutterで作成する方法を記載します。
通知チャンネルについては[こちら](https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ja#ManageChannels)。
[flutter_local_notification](https://pub.dev/packages/flutter_local_notifications)というパッケージを使用します。

# プラグインの初期化処理
プロジェクトのmain関数内に以下の処理を追加します。

“`dart
final FlutterLocalNotificationPlugin notificationPlugin =
    FlutterLocalNotificationPlugin();
await notificationPlugin.initialize(
InitializationSettings(
   android: AndroidInitializationSettings(‘

元記事を表示

【Android】RecyclerViewアプリを作成

# はじめに
業務で初めて触った時、訳が分からなかったのがRecylerViewでした。改めて学習してみると意外とシンプルで、きちんと手順踏んだらすぐに実装することができます。

# 実装
・まず表示するデータです。
 居酒屋のドリンクメニュー風。
“`java:MainRow.kt
package com.example.recyclerviewapp

import java.util.ArrayList

data class MainRow(val title: String, val price: Int)

val menu : ArrayList = arrayListOf(
MainRow(“生ビール”, 500),
MainRow(“ハイボール”, 400),
MainRow(“レモンサワー”, 400),
MainRow(“グレープフルーツサワー”, 400),
MainRow(“ウーロンハイ”, 400),
MainRow(“緑茶ハイ”, 400),
MainRow(“コーン茶ハイ”, 4

元記事を表示

ActivityとFragment間でViewModelを共有したい

### はじめに
前提として、deprecatedになっているViewModelProviders.ofやfragment-ktxを導入せずにViewModelを使ってデータ共有したいと思い調べた。

### 手順

– 引数なしのViewModel
– AndroidViewModel(application)を継承していて引数がapplicationだけのとき

であればViewModelProviderを使用した以下のコードでとても簡単に共有することができる。

~~~kotlin:MainActivity.kt
//FirstFragmentとSecondFragmentと共有
private val viewModel by lazy {
ViewModelProvider(this)[MainViewModel::class.java]
}
~~~

~~~kotlin:FirstFragment.kt
//SecondFragmentとMainActivityと共有
private val parentViewModel by lazy {
ViewMod

元記事を表示

【Flutter】import するパッケージが多くなった時の対処法

## 初めに
コーディングをしていく中で、一つのファイルでインポートするパッケージやページの数が増えてきてしまいました。
初期に書いたコードの中では、以下のように大量の import 文が並んでいるものもありました。
![スクリーンショット 2022-09-12 16.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609901/72fa0578-f6bc-63e0-e65e-95bea5fc3c52.png)
流石にここまで import 文が並ぶことは無いかもしれませんが、大きなプロジェクトになると大量のページやパッケージを import する機会はあると思うので、今回はその対処法を共有したいと思います。

## 記事の対象者
+ ファイル内の大量の import を無くしたい方
+ 大規模なアプリを開発中の方
+ コードを綺麗に保ちたい方

## 実装
大量の import 文を無くすためには `export` を使います。
まずは新たに 「 importer.dart 」 というフ

元記事を表示

[Flutter]BLoC 7.0系から8.0系の破壊的変更に対応した話(mapEventToState廃止)

## はじめに
私の携わっているプロジェクトではflutter_blocを採用しており、
今回7系から8系にアップデートを行いました。

https://pub.dev/packages/flutter_bloc

元々v7.0.0を利用しておりましたが8系で1点破壊的変更が入っており、
対応に関する日本語での記事が少なかった為、今回共有をさせて頂きます。

## 破壊的変更点 (mapEventToState廃止)

v7.0.0を利用していた当初、何かしらのEventを発火させた後にBLOCクラス内では`mapEventToState`を用いて各種Eventのハンドリングを行なっておりました。
この`mapEventToState`は**v7.2.0から非推奨**になり**v8.0.0以降は廃止**となるようです。

> In bloc v7.2.0, mapEventToState was deprecated in favor of on. mapEventToState will be removed in bloc v8.0.0.
https://blocli

元記事を表示

vistaでandroid studio その24

# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。

# 練習問題
jniでopenglで箱を回転、表示せよ。

# 写真

![device-2022-09-15-115037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/a7de5048-6f2e-3cc3-ac88-a99e6fcd9fb5.png)

# サンプルコード

“`
#include
#include
#include
#include
#include
#include
#include
#include “Matrix.hpp”

#define LOG_TAG “libNative”
#define LOGI(…) __android_log_print(ANDROID_LOG_I

元記事を表示

Epoxyで最初のアイテムだけViewが違うRecyclerviewを実装したい

# 初めに
今回はEpoxyライブラリで最初のアイテムだけViewが違うRecyclerViewを実装していきたいと思います。
### 本文
“`kotlin
override fun addModels(models: List>) {
val item = ExcampleBindingModel_().apply { id(“header”) }

super.addModels(
buildList {
add(item)
addAll(models)
}
)
}
“`
`addModels`は`buildItemModel`で作った`EpoxyModel`のリストをViewに当てはめてくれる部分なのでその段階でヘッダーに設定したい`View`を最初に`add`するようにしてあげればいいだけです。
# 最後に
ヘッダーだけViewを変えたい等で役立つかと思います。
何かの実装の参考になれば幸いです。

元記事を表示

MediatorLiveDataでNullPointerExceptionが出たときの対処法

### はじめに
以下のエラーが出た。

> at androidx.databinding.ViewDataBinding.updateRegistration(ViewDataBinding.java:653)

“`java:ActivityMainBindingImpl.java
if (vModel != null) {
// read vModel.isNetworkError
vModelIsNetworkError = vModel.isNetworkError();
}
pdateLiveDataRegistration(0, vModelIsNetworkError); //この行で上記のエラー
“`

>Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘void androidx.lifecycle.LiveData.observeForever(androidx.lifecycle.Observer)’ on a null object

元記事を表示

Kotlin Coroutineを使ったタイムアウト付きのリトライ処理の方法

# KotlinCoroutineを使ったタイムアウト付きのリトライ処理の方法

## APIリクエスト失敗時にタイムアウト付きでリトライする場合

“`main.kt

class ApiService() {

//通信処理用スコープ
private val ioScope by lazy { CoroutineScope(Job() + Dispatchers.IO) }

suspend fun request(): Boolean {
return try {

//通信するため、IOスコープに切り替える
withContext(ioScope.coroutineContext) {
//Timeoutを設定
//Timeout時はTimeoutCancellationExceptionが吐かれる
withTimeout(10 * 1000) {

//

元記事を表示

vistaでandroid studio その23

# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。

# 練習問題
jniでopenglを表示せよ。

# 写真

![device-2022-09-14-115340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/a558700a-152c-ff16-1d8b-5739347c8143.png)

# 方針

– ndk r10 にopengl無いので、r12bにする。

# サンプルコード

“`
#include
#include
#include
#include
#include
#include
#include

#define LOG_TAG “ohi”
#define LOGI(…) __android_log_print(ANDRO

元記事を表示

vistaでandroid studio その22

# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。

# 練習問題
jniでログを吐け。

# サンプルコード

“`
#include
#include
#include
#include
#include

JNIEXPORT jstring JNICALL Java_com_ohisamallc_ohiapp154_ohiapp154_MainActivity_hello(JNIEnv * env, jobject thiz) {
char buf[456];
const char * s0 = “ズン “;
const char * s1 = “ドコ “;
const char * s2 = “ドコ キヨシ!!”;
int i = 0;
int n = 0;
while (i == 0)
{
if ((rand() & 1

元記事を表示

Android StudioでWebViewアプリを作成してみる

## はじめに
転職による有休消化期間で何かしたいと思い、Androidで欲しかった機能を作ろうと思い立ちました。
期間は半月程度です。
ほしかった機能はここでは重要ではないので割愛しますが、Androidのローカルファイルへのアクセスが必要な他は特に必須機能がないのでアプリ画面はWebViewなどで簡易に作成することにしました。
Kotlinは未経験でしたが、Javaは経験済みだったため、Kotolinを一から学習するのではなく、JavaでのAndroidアプリをモック的に作成し、Kotlinにリファクタリングする形で差分学習をし、学習効率をあげようと計画しました。

いつもの自分だったら、Kotlinの本などで一通り学習して、アプリの基本設計もして、準備万端な状態で開発に入るのですが、半月という期間でそれでは間に合いません。
また、こちらの本を読んだばかりで、まずモックを作ってしまうというアプローチや学習効率を模索したかったのもあります。(Kindle Unlimitedに入っています)
Flow vs LiveData

どれにします? どの流れにします?

![スクリーンショット 2022-09-13 17.29.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/578bb333-c6b1-7ae4-3beb-d0f8a5c2bc2a.png)

元記事を表示

OTHERカテゴリの最新記事