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

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

LiveDataをObserveする際の注意点

## 概要

みんなLiveDataって使ってますよね!LiveData便利ですよね!
でも意識していないと意図しない動作になってしまうことがあります。
本稿ではそんな落とし穴になり得る書き方の一つを紹介します。

## TLDR
LiveDataの`observe`メソッドを呼び出した際、LiveDataにイベントが保持されていればイベントを処理してしまう

## LiveDataの頻出パターン
まずはLiveDataを使う上での頻出パターンを紹介します。

以下のような仕様がある前提で本稿を進めていきます。

“`
LIVEボタンをタップした時にだけスナックバーを表示する。
“`

まずViewModelにLiveDataに値を流すための処理を書きます。

“` ViewModel
class FirstViewModel: ViewModel() {
// 外から値を流せないようにするために、mutableLiveDataはアクセス修飾子をprivateにしている。
private val mutableLiveData = MutableLiveData

元記事を表示

(Android Studio)Gradleのプロキシ設定のやりかた

#エラーの概要
学校や職場では、ネットワークにプロキシ(Proxy)サーバーが使われている。その環境下でAndroid開発を行うと、プロキシサーバーエラーになってしまう。
僕の場合は、学校のネットワークで開発を行っていました。Android studioのプロキシ設定は、**[File]→[settings]→[Appearance&Behavior]→[System Settings]→[HTTP Proxy]**から設定できます。

しかし、僕の場合はこれでは解決しませんでした。Gradleエラーになっていまうのです。

#解決策
**Android Studio 4.0**で確認できました。
こちらを参考にしました。 https://qiita.com/hishida/items/9479fb64a016032c0938

##1.gradlewかgradlew.batに以下を記述

“`
set JAVA_OPTS=-DproxyHost=myproxy.co.jp //プロキシサーバーのアドレス
-DproxyPort=8080

元記事を表示

Flutterのスプラッシュ画面でAndroidのダークテーマ対応

Flutterで開発中に、アプリ内ではダークテーマしたもののスプラッシュ画面が真っ白のままだったのが気になったので、
一番簡単にダークテーマ対応をする方法です。

スプラッシュ用の`launch_background.xml`の記述を以下のようにするだけです。

“`launch_background.xml






元記事を表示

Kobiton でスマートフォンのリモートテストを試してみた

# 概要

昨今のテレワーク推進の中、スマートフォン開発における課題となるのが実機による動作検証です。
多種多様なスマートフォン端末の準備・利用は、利用者それぞれがテレワークしていると難しくなります。

今回は上記課題を解決しうるリモート実機動作検証サービス [Kobiton](https://kobiton.com/) について調査しました。

## TL; DR

– Kobiton https://kobiton.com/ はリモート実機検証できるサービス
– ブラウザからリモートの実機を操作して手動・自動での動作検証が可能
– デスクトップアプリを利用すると、自分たちで用意した実機を使っての動作検証も可能
– 30日間無料トライアル

# リモートの実機による動作検証

Kobiton がクラウド上に用意した実機を使って動作確認を行うことができます。

## 利用可能な端末

利用可能な実機の一覧は以下のURLから参照できます。

https://docs.kobiton.com/devices-list/

2020年7月4日時点で208種類のAndroid・iOS端末を利用

元記事を表示

[Modern Android] Jetpack Compose その5

こんにちは!7月にになりましたね。

前回に引き続きJetNewを続いて見ながら、
Jetpack Composeを理解しようと思います。
出来ればFlutterと比べながらみようと思います。

#今回

HomeScreenのbodyContentを見てみましょう。
drawerContent、topAppBarは前回に確認しました。

> bodyContent = { modifier ->
HomeScreenContent(postsRepository, modifier)
}

“`kotlin

@Composable
fun HomeScreen(
postsRepository: PostsRepository,
scaffoldState: ScaffoldState = remember { ScaffoldState() }
) {
Scaffold(
scaffoldState = scaffoldState,
drawerContent = {

元記事を表示

Firebase RemoteConfigの挙動について

RemoteConfigは便利なんですが雰囲気で使うと思ったように動かなかったりするのでちゃんとまとめようと思います.

※ QiitaのほうがSEO強そうなのでブログに書いた内容の転載ですが同じものを投稿しておきます
-> https://iwsksky.hatenablog.com/entry/2020/07/04/114815

## TL;DL
– fetchAndActivateをするとremoteの値がローカルに保存され参照可能となる
– ローカルキャッシュの期限は最短でも12分でそれ以上の頻度では更新できない
– 参照は通信結果ではなく常にローカルキャッシュの値

## 概要

https://firebase.google.com/docs/remote-config/images/param-precedence.png?hl=ja
図1. RemoteConfig概要図[1]

抑えておきたい概念は以下の通り

– cache
– fetch/activate
– interval

1個ずつ見ていきます.

#### cache

RemoteConfigは常に

元記事を表示

Androidスマホ・タブレットは何でもできる!Termuxで動かすアレコレまとめ

「使ってないAndroidスマホ,タブレットがある」
「これサーバーにできないかな?」

その夢,**かなえられます。**

少々めんどくさい作業もありますが,やっていけば必ずできます。

# どうやって動かすか
Androidには「Termux」というアプリがあります。
これを使うと,Linuxを動かすことができます。
パッケージもAPTで管理されていて,豊富です。

https://play.google.com/store/apps/details?id=com.termux&hl=ja

また,GBoardなどのキーボードですと不便を感じるかもしれません。
「Hacker’s Keyboard」がおすすめです。

https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard&hl=ja

## 下ごしらえ
Linuxに触れたことのある方は慣れていると思います。

まず,Termuxが端末内のファイルにアクセスできるようにするには権限を与える必要があります。

“`bash
$ te

元記事を表示

Flutter辞書

##Widget

**ー部品**

##Constraint Programming

**ー制約プログラミング**

「問題を制約の集合として記述してコンピュータに与えると、コンピュータが制約を充たした答を見つけてくれる」

ことを目指すプログラミング・パラダイムのことだと言えます。

##Sandbox

コンピュータセキュリティ技術において、**サンドボックスは**、外部から受け取ったプログラムを保護された領域で動作させることによって、システムが不正に操作されるのを防ぐセキュリティ機構のこと

##ただの英和辞典

– anatomy:解剖学
– emulate:模倣する
– deploy:展開する
– configure:構成・機能
– resource hog: A computer function that slows processing time.

##その他

– みてから自分でやってみよう
– ノートをとるのはありだよ
– 動画は飛ばさない
– わからないことがあれば自分でググってみて、そのあと少し時間をおいてから見直すといいよ
– The most impr

元記事を表示

【Kotlin】onClickListenerのパターンとその使い分け方

#はじめに
 この記事では私がインプットした`onClickListener`の3つの記法と、そのメリットデメリットを記しています。今回記していくのは3パターンですが、私が恣意的にチョイスしただけで、この3つが全てを網羅している事など無いので悪しからず。

##一つ目:クラス全体に掛かるインターフェースを用いる
 MainActivityに実装すると仮定したとき、クラス自体に`View.OnClickListener`のインターフェースを参照します。

“`
class MainActivity : AppCompatActivity(), View.OnClickListener {

   override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

button1.setOnClickListener(this)
}

o

元記事を表示

[Android]自動スクロールで手を動かすことなく実機確認を行う

一覧など、無限スクロールが存在する機能を使用するときに、実機にかかる負担をAndroidStudioのMemory Profilerで監視をし~~重箱の隅をつつく~~品質をチェックしているのだが、手で動かすのがだるい。

なので、無限スクロール自動化をしてみた。

# SampleCode

簡単にRecyclerViewのSampleコードを実装したので、こちらを使用する。
https://github.com/yamachita0109/RecyclerView

# 実際に自動scrollしてみた

下記コマンドをコマンドラインに貼り付ければOK。
もっと細かい値を指定したい場合は、[公式ドキュメント](https://developer.android.com/studio/command-line/adb?hl=ja)を参考にすること。

“`
$ while [ true ]; do
adb shell input swipe 521 1540 492 432
done;
“`

## デモ

![demo.gif](https://qiita-image-store.

元記事を表示

net::ERR_CLEARTEXT_NOT_PERMITTED

#エラー:net::ERR_CLEARTEXT_NOT_PERMITTED

#AndroidManifest.xmlに追加
・android:usesCleartextTraffic=”true”

元記事を表示

【Android 9.0 Pie】ActivityやFragment以外でのstrings.xmlの呼び出し方の例

## 初めに
定数の管理に便利なstrings.xmlですが、ActivityやFragmentを継承していないクラスで呼び出す際の方法をメモしておきます。

## 実装方法
私はApplicationクラスを継承したクラスにコンテキストを生成してしまい、定数取得用の関数を作成して呼び出し側のコードを少しでも削れるようにしてみました。

“`java:Model.java
public class Model extends Application {
private static Context context;

@Override
public void onCreate() {
super.onCreate();
context = this;
}

/**
* 定数取得関数
* strings.xmlに定義した定数をどこからでも取得できる
* @param resId R.string.resId
* @return String 定数
*/
p

元記事を表示

RecyclerViewで消えないScrollbarを表示する

## 概要
RecyclerViewで要素が多い際に、まだスクロールできることをユーザーに伝えたかったので調べた際のメモです。

## Scrollbarを表示する
表示されるようにするだけなら`RecyclerView`に`scrollbars`項目を指定してやれば良い。
しかしこれだけだと、時間経過でフェードアウトしてしまう。

“`
android:scrollbars=”vertical” // 横向きならばhorizontal
“`

## Scrollbarが消えないようにする
時間経過で消えないようにするため上述の要素に加えて`fadeScrollbars`に`false`を指定する。

“`
android:scrollbars=”vertical” // 横向きならばhorizontal
android:fadeScrollbars=”false”
“`

元記事を表示

[Android]インストラメント化テストとローカルテストでコードを共有するには

# はじめに
Androidプロジェクトのテストは、テストの実行環境で以下のふたつに分けられます。

– **ローカルテスト**
`module-name/src/test/java/` にあります。
マシンのJVM上で実行されるため、実行時間・リソースがより少なく済みます。
Androidフレームワークを必要に応じてモックする必要があります。

– **インストラメント化テスト**
`module-name/src/androidTest/java/` にあります。
実機またはエミュレータ上で実行するため、再現性が高く実行時間・リソースがより多くかかります。
Instrumentation APIからContextなどの値を参照できます。

# テストソースにファイルを追加する
これらのテストでコードを共有したり、任意のファイルを参照するには、gradleでテストソースを指定します。

例えば、ローカルテスト・インストラメント化テストでコードを共有したい場合、
`module-name/src/sharedTest/java/{アプリのパッケージ名}`配下にファイルを作成し、アプリモ

元記事を表示

In-app Billing APIのPurchaseの形式を調べた話

## Play Billing Libraryが3.xに
Play Billing Libraryが3.xがリリースされました。
Play Billing Libraryを利用することでAIDLファイルとサービスクラスを作成する手間なくIn-app Billing APIを利用できるようになり、非常に便利になりました。

## ところで、In-app Billing APIで購入をした際のレシートの形式が知りたい
Androidでアプリ内課金の実装をする場合、サーバーにレシートを送るAPIが必要です。
APIの実装のためにレシートの形式を把握する必要があり、実際にコードを書いて調べたので備忘録的にまとめておきます。

## 確認用のコード
今回の確認用のコードですが、以下のように `BillingClient.launchBillingFlow()`を実行して

“`kotlin
val params = BillingFlowParams.newBuilder()
.setSkuDetails(details)

元記事を表示

Android の実行環境

配属された新人のトレーナーになったので Android のコーチングをしているわけですが
上手く言語化できない部分があったので自分なりに纏めました。

間違い等コメントいただけると嬉しいです?

## Java

– クラスベースのオブジェクト指向型プログラミング言語
– 処理速度が速い
– プラットフォームに依存しない
– オブジェクト指向

### JVM

`Java Virtual Machine`

– Java アプリケーションを動かすためのソフトウェア
– JVM が各 OS 向けに Java クラスファイルをコンバートする事でアプリケーションが動作する

Java プログラム (.java) をコンパイルすると Java クラスファイル (.class) が出来上がる。
Java クラスファイルを JVM が各 OS 向けにバイトコードに変換してアプリケーションを動かしている。

jvm_flow.png既存アプリを一部Flutter化する(Add-to-app)

Flutterには既存のNativeアプリの一部分をFlutter化するソリューションである[Add-to-app](https://flutter.dev/docs/development/add-to-app)が存在するので試してみる。

Androidでは特定のActivityをFlutter化出来たり、特定のFragmentをFlutter化出来たりと結構柔軟に対応できそうである。
iOSに関しては特定のViewControllerをFlutter化可能である。

Flutter Module(Flutter化された画面というか普通にFlutterの部分)を作成して、Android、iOSそれぞれから呼び出すまでの手順を示す。

# 制限
Flutter v1.12 Add-to-appには下記制限が存在する。

– 複数のFlutterインスタンスを動作させたり、Viewの一部で動作させると挙動がおかしくなる可能性がある。
– [バックグラウンド動作モード](https://flutter.dev/docs/development/packages-and-plugins/b

元記事を表示

Bluetooth AudioデバイスからTHETAを操る

## はじめに

リコーの @mShiiina です。

弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA VRICOH THETA Z1は、OSにAndroidを採用しています。Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます(詳細は本記事の末尾を参照)。

2020年6月のFWアップデートにより、プラグインでBluetooth Classicデバイスを使用できるようになりました。

今回は、Bluetoothイヤホン、Bluetoothオーディオを使用してリモート撮影ができるプラグインを作ってみました。動画はこんな感じです。

元記事を表示

Huu プライバシーポリシー

“””,HuuLooのプライバシーポリシーをお読みいただき、ありがとうございます。”””,
“””お客様には、当社を信頼して情報を提供していただいていることにお礼を申し上げます。当社が収集する情報の種類、収集の理由、収集した情報の利用方法、お客様情報に関する選択について理解を深めていただくことがまず重要であると考えます。本ポリシーは、当社のプライバシー対策を、法律用語や専門用語をなるべく控えて、平易な言葉で説明しております。”””,
“””発効日:2020年4月30日”””,
“””1.本プライバシーポリシーの適用範囲”””,
“””2.当社が収集する情報”””,
“””3.情報の使用目的”””,
“””4.情報共有の方法”””,
“””5.越境データ移転”””,
“””6.お客様が有する権利”””,
“””7.お客様の個人情報の保護方法”””,
“””8.当社におけるお客様情報の保有期間”””,
“””9.児童

元記事を表示

NDKでOpenCVを使った画像処理向けAndroidアプリのひな形 (とマルチプラットフォームに向けた設計)

# はじめに
先日、[CameraXとOpenCVを使った画像処理向けAndroidアプリのひな形](https://qiita.com/iwatake2222/items/c0ebe6d84afdef57aab3 )という記事を投稿しました。これは、カメラ入力、画像処理、画面出力のすべてをJavaコードで行いました。
今回は、画像処理をNDK(C++)側で処理してみます。

これによって、上手く設計すれば様々なプラットフォームで共通のロジックコードを使用することが出来ます。これについては後半で少し触れます。

例えば、↓の動画はディープラーニング処理(Pose NetとSemantic Segmentation (DeepLab)) を行う処理と結果の描画処理をライブラリ化し、Androidアプリ、Windowsアプリ、Linuxアプリ(x64, armv7, aarch64)から呼べるようにしています。

元記事を表示

OTHERカテゴリの最新記事