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

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

OkHttp の Intercepter で出るエラー( java.lang.NoSuchMethodError: No static method metafactory )

# 背景

MVVM の復習のために久しぶりに github API を Retrofit2 でたたくサンプルアプリを作成していた。

参考サイト https://tech.mti.co.jp/entry/2020/03/31/163321

# エラーの内容
こんな感じのエラーが出てくる

“`
java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of ‘jav

元記事を表示

React NativeでAndroidアプリを環境ごとに共存させる

# 背景、動機

[React NativeでiOSアプリを環境ごとに共存させる](https://qiita.com/nouka/items/fafffede6ded8db933c3)
上記の記事に続いて、Androidでも同様にステージング環境を新たに作成し、各環境ごとのアプリを1つの端末に共存させるようにします。

# 目指す姿

以下のように、1つの端末に各環境のアプリを別名で共存させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/127338/747cb6c7-cb9e-55e1-d000-65c28946cb3d.png)

# 手順

1. `app/build.gradle`の buildTypes に`staging`を追加。
2. `debug`と`staging`の`app_name`を変更。

## 1. `app/build.gradle`の buildTypes に`staging`を追加。

### 1-1. buildTypes に`staging

元記事を表示

In-App Updateを実装する

Androidでアプリ内アップデート(In-App Update)を実現できるようになってだいぶたっていますが、今更ながらやり方を解説してみようと思います。

公式にはこちら
https://developer.android.com/guide/playcore/in-app-updates

## 要件
– Android 5.0 (API Level 21)以上
– Play Core library 1.5.0以上

Android 4系以下には適用できないです。
また、当たり前ですが、実際にアップデートを行うのはPlayストアアプリなので、Playストアアプリが使えない環境では使えません。

## 2種類のアップデート方法

アップデート方法にはFlexibleとImmediateの2種類が選択可能です。

### Flexible

アップデートのダウンロード中もアプリの使用が可能です。
以下のように、ダイアログが表示され、「更新」をユーザーが選択すると、ダウンロードが始まりますが、その間もアプリの継続利用が可能です。ダウンロードが完了しても即座にアップデートは行われず、ア

元記事を表示

Firebase Hostingで、アプリ内で表示するWebページを作ってみた

# 作ったもの
iOSアプリの「設定画面」>「よくある質問」の先のWebページ。
スクリーンショット 2020-05-01 13.54.44.png

今後も頻度高く更新していきたいページなので、アプリ内に埋め込むのではなく、Webページとして置いておきたい気持ちがありました。
レンタルサーバーも検討しましたが、静的ページであることと、PV数も多くはないだろうということで、最終的に [Firebase Hosting](https://firebase.google.com/docs/hosting?hl=ja) を使ってみることにしました。
基本的に無料([従量課金制](https://firebase.google.com/pricing/))で使えて、SSL化もしてくれます。素敵。

# 手順
## Webペ

元記事を表示

ViewModelについて

# ViewModelとは

詳細はhttps://developer.android.com/topic/libraries/architecture/viewmodel

ざっくり説明すると、Activityのライフサイクルには以下の問題がある。

* `onSaveInstanceState()`を利用したデータの保存は、データ量が多い場合は適していない。
* 非同期処理中に画面が再生成された場合、非同期処理を中止して再実行するなどのリソースが無駄になる。

UIでは、データの表示、ユーザからの要求の対応、OSとのやり取り(権限の取得)を行うようする。
そして、DBへのアクセスやネットワークからのデータの取得は、UIから切り離して実装するほうが良い。

それが容易に実装できるのが、`ViewModel`クラス

# 実装

#### ViewModel本体の実装

`ViewModel`クラスを継承したクラスを実装する。
このクラスには、保持しておきたいデータを定義する。

“`
/**
* ViewModelクラスを継承したクラス
*/
class MainViewMod

元記事を表示

Android 9・10でBroadcastReceiverを使った着信番号取得がうまくいかない時のメモ

BroadcastReceiverを使った着信番号の取得が、なかなかうまくいかなかったので解決方法を書いておきます。

# :checkered_flag: やりたいこと
電話がかかってきたときに、かかってきた番号を取得したい。

# :pencil2: 電話の状態を取得するReceiver
まず、検索してよく書いてあったコードで試しました。

“`xml:Android.Manifest.xml

元記事を表示

Flutter で Android の productFlavors にて Target を指定する方法

# 結論
指定の flavor のところにこれを書けばよい

`project.target = “lib/main_development.dart”`

flavor 指定の全体的にはこんな感じ

“`groovy
flavorDimensions “default”

productFlavors {
development {
project.target = “lib/main_development.dart”
dimension “default”
applicationIdSuffix “.dev”
versionNameSuffix “.dev”
}
staging {
dimension “default”
applicationIdSuffix “.stg”
versionNameSuffix “.stg”
}

元記事を表示

[Kotlin]Firebase Analytics, Crashlyticsの実装

# はじめに
– Analyticsでユーザー情報が取得できる
– Crashlyticsでクラッシュしたらとれる

# 画面
Analytics
導入するだけで色んな情報がとれます

![スクリーンショット 2020-05-01 13.14.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199764/eae71f76-9b07-f540-0ffb-9bf4a8547fe4.png)

Crashlytics
クラッシュするとクラッシュの詳細が見れます

![スクリーンショット 2020-05-01 13.17.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199764/ae2c15b7-409f-99d8-353d-4d52f7cd1f76.png)

何もない画面

“`activity_crashlytics.xml

<

元記事を表示

OlympusのカメラをWEBカメラ化する方法

# はじめに
最近在宅勤務などで一眼カメラのWEBカメラ化が流行っていますね。
SIGMA fpはつなぐだけでWEBカメラになりますし、Canonは自社のカメラをWEBカメラにする[ツールを公開](https://pc.watch.impress.co.jp/docs/news/1250292.html)してます。
それ以外のカメラでも[この記事](https://mono-logue.studio/19117)の方法でWEBカメラになります。流れとしてはテザー撮影用のソフトウェアでPCにライブビュー撮影の画面を映し、それを範囲指定してキャプチャしたものを仮想カメラ出力するというものです。

ただ、私の所持するE-M10MarkⅢなどテザー撮影に対応していない機種もあります。ATEM MiniなどHDMI入力をUVC(USB Video Class)にしてくれる機器を使えばWEBカメラ化できますが、わざわざ購入するのはハードルが高いです。そこで無料で何とかする方法を見つけました。

結論から申し上げると画質が良くないのであんまり使えないです。

# 手順
全体の流れとしてテザー撮影用の

元記事を表示

[Kotlin]Firebase Remote Configの実装

# はじめに
– [公式はこちら](https://firebase.google.com/docs/remote-config/android?hl=ja)
– メンテナンスモードや強制アップデートの実装に使える

# 画面
Firebase consoleでRemoteConfigの設定

![スクリーンショット 2020-05-01 11.09.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199764/de10c774-79d8-de89-5ef7-8b4451088795.png)

FirabseConsoleのRemoteConfigで設定する値は2つの為、それぞれ表示する用のTextViewを2つ用意
スクショは実装結果です

File.jpgAndroidでPush通知を表示する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/4978efe3-4e2f-5820-f0f8-7d045d31d259.png)

Firebase Cloud Messaging(FCM)を使って AndroidでPush通知を実装したときのメモです。(2020/4/29時点)

#Firebase Cloud Messagingとは
Firebase Cloud Messaging(FCM)は、メッセージを無料で確実に配信するためのクロスプラットフォーム メッセージング ソリューションです。以前は Google Cloud Messaging API が使われていたようですが、現在はFCMに移行しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/9c9c2a8a-605d-3030-6374-74da49559b33.png)

FCMで端末にメッセージ

元記事を表示

startActivityForResult / requestPermissions が deprecated になる話

# はじめに
影響範囲が大きそうなのでまとめておきます。
※本記事は Medium にも投稿済みです。 Qiita の方が見る人が多そうなのでこちらにも投稿しました。

`androidx.fragment:fragment-ktx:1.3.0-alpha04` から、以下のメソッドが `deprecated` になります。

– startActivityForResult
– onActivityResult
– requestPermissions
– onRequestPermissionsResult

[公式ソース](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0-alpha04)

代わりに 新しく追加された Activity Result APIs を使えとのアナウンスがあります。

[Getting a result from an activity](https://developer.android.com/training/basics/intents/result)

元記事を表示

ExoPlayerで、暗号化されたHLSを任意のkeyで復号・再生するには

※この記事は[DRM](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E8%91%97%E4%BD%9C%E6%A8%A9%E7%AE%A1%E7%90%86)が施されたHLSの復号についてではなく、[AES](https://ja.wikipedia.org/wiki/Advanced_Encryption_Standard)等で暗号化されたHLSを復号する方法について記載しています。

### HLSの暗号化の仕様

HLSストリームの暗号化に関する情報はm3u8ファイルの`#EXT-X-KEY`に記載されています。
例えば、以下のファイルでは暗号化の方法・暗号化キーのurl・[初期化ベクトル](https://ja.wikipedia.org/wiki/%E5%88%9D%E6%9C%9F%E5%8C%96%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB)の値がわかります。

“`
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURA

元記事を表示

FragmentでActionBarのTitleを設定する方法

# FragmentでActionBarのTitleを設定する方法
## すぐ忘れるのでメモ。
Navigationでもっとかっこよく出来るはずだが。。

“`
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity).supportActionBar?.title = “タイトル”
}

元記事を表示

Android – AsyncTaskの直列処理と並列処理の順番は保証されるのか??

Android開発において、AsyncTaskで直列処理と並列処理について、ほぼ同時に動いた時はどのような動きになるのか、実際に順番は保証されるのかわからなかったので、軽くコードを組んでみて確認してみましたので、メモとして残しておきたいと思います。

【参考URL】
[developer – AsyncTask](https://developer.android.com/reference/android/os/AsyncTask)
[Android – AsyncTaskの直列処理?並列処理?](https://qiita.com/marusa/items/e4c3b780f8926e6afc17)
[AsyncTaskの非同期処理はどのように実現しているのか](https://qiita.com/kazy/items/755e8d3e9e36f5730895)

#【試作1】タスク1:直列処理、タスク2:並列処理の場合
task1:execute()
task2:executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)

“`
// 1

元記事を表示

【Android】Dagger2 ~基本編

# はじめに

[前回の記事(DI(依存性の注入)とは依存性を注入するということである、、?)](https://qiita.com/iTakahiro/items/353a11f6c9d2a927158d)では
DIとは何かについて記述しました。

今回は[Dagger2](https://dagger.dev)を導入してみたので記事にまとめます。
言語はKotlinです!

参考にしたチュートリアルは[こちら](https://www.raywenderlich.com/6583167-dagger-2-tutorial-for-android-advanced)です。

# 準備

まず、`build.gradle`にて`Dagger2`を導入します。
参照:[Dagger README.md](https://github.com/google/dagger#gradle)

“`gradle:build.gradle(app)

apply plugin: ‘kotlin-kapt’ // Kotlinでアノテーションを使用するために必要

dependencies {

元記事を表示

ViewModelProviders is deprecated になっているので、ViewModelProviderを使う

# ViewModelProviders が非推奨になっている

公[Android Developer 公式: ViewModel](https://developer.android.com/reference/android/arch/lifecycle/ViewModel?hl=ja)に書いてある
“ViewModelProviders.of(this).get(UserModel.class)“
をつかうと deprecated(非推奨) と表示されてしまう。
[公式のViewModelProviders](https://developer.android.com/reference/android/arch/lifecycle/ViewModelProviders)の説明によるともうメンテナンスがされないらしい。
今後は “ViewModelProvider“ を使わないといけないらしいので今回はその使い方を紹介する。

#用意するファイル

## Activity
プロジェクト開始時に通常通り生成されるもの
解説は省く

## ViewModel
MVVM

元記事を表示

Android、Chrome、CloudFrontの組み合わせでNo ‘Access-Control-Allow-Origin’が表示される

CloudFrontでリソースの配信を行っているとき、Android版のChromeだけでCORSのエラーが表示されることがある。

“`
No ‘Access-Control-Allow-Origin’ header is present on the requested resource
“`

CloudFrontにおけるCORSの設定は [CloudFront からの「No Access-Control-Allow-Origin」を解決する](https://aws.amazon.com/jp/premiumsupport/knowledge-center/no-access-control-allow-origin-error/) に書いてある通りなのだが、この設定を行っていてもエラーが起きることがある。

[Cross-origin request from cache failing after regular request is cached.](https://bugs.chromium.org/p/chromium/issues/detail?id=40909

元記事を表示

Jetpack Composeの公式サンプル JetNewsのFavoriteボタンを押した時の流れ

現在Jetpack Composeは絶賛開発中ですが、以下で新しいバージョンを使ったサンプルアプリがあります。そのサンプルの中で、いいねボタンが存在します。これがどうやって動くのかを見ていきます。
https://github.com/android/compose-samples/tree/master/JetNews
![toggle.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/f86c1333-68c1-5d62-522f-21dcee92e0db.gif)
まだbeta版でもないので、きっと変わっていくとは思います。
0.1.0-dev09での情報です。

## JetNewsのコードを読んでいく。

まずこの行はPostCardSimpleのようで、以下のようにプレビューされています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/37a34698-96dd-a02e-8

元記事を表示

Android初学者用まとめ

はじめてAndroid開発を行って学んだことをまとめました。
最初は、[はじめてのAndroidプログラミング 第4版 | 金田 浩明 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4815601143/ref=cm_sw_r_tw_dp_U_x_ejxQEb7Q0AMYJ)を読むのがすごくお勧めです。
数時間ですらすら読めてAndroid開発の特徴をつかめました。

# アーキテクチャ
## Androidのアーキテクチャを考える時
これが丁寧で分かりやすい。
[Androidアーキテクチャことはじめ ― 選定する意味と、MVP、Clean Architecture、MVVM、Fluxの特徴を理解する – エンジニアHub|若手Webエンジニアのキャリアを考える!](https://employment.en-japan.com/engineerhub/entry/2018/01/17/110000?amp=1)

公式のアーキテクチャガイド
[アプリのアーキテクチャ ガイド  |  Android デベロッパー  |  Andro

元記事を表示

OTHERカテゴリの最新記事