- 1. 【Kotlin】下部ナビゲーション・アクティビティを触ってみる
- 2. [初心者向け]JavaでRecyclerViewのミニマムサンプル
- 3. [Kotlin]Firebase InAppMessagingの実装
- 4. スマホと洗濯バサミでWebカメラのない人を救いたい
- 5. mockk でのエラー対処 io.mockk.MockKException: no answer found for: Observer(observer#2).onChanged
- 6. Delphi10 でTwilio apiを叩いてSMSメッセージを送る
- 7. Dagger2 でのエラー対処 kotlin.UninitializedPropertyAccessException: lateinit property mainViewModelFactory has not been initialized
- 8. Dagger2 でのエラー対処 java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasAndroidInjector
- 9. 眺めて覚える C# Xamarin Forms(11) ListView Programmatically
- 10. Androidアプリ:イベントとリスナをまとめてみる
- 11. 眺めて覚える C# Xamarin Forms(10) ListView
- 12. 【Kotlin】Fragmentのサンプル
- 13. OkHttp の Intercepter で出るエラー( java.lang.NoSuchMethodError: No static method metafactory )
- 14. React NativeでAndroidアプリを環境ごとに共存させる
- 15. In-App Updateを実装する
- 16. Firebase Hostingで、アプリ内で表示するWebページを作ってみた
- 17. ViewModelについて
- 18. Android 9・10でBroadcastReceiverを使った着信番号取得がうまくいかない時のメモ
- 19. Flutter で Android の productFlavors にて Target を指定する方法
- 20. [Kotlin]Firebase Analytics, Crashlyticsの実装
【Kotlin】下部ナビゲーション・アクティビティを触ってみる
最近のアプリには必ずと言ってもいいほど存在する下部ナビゲーション
AndroidStudioにはテンプレとして存在するからお試しに使ってみる![スクリーンショット 2020-05-03 17.30.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283826/3d5d6aa9-e396-4ebc-569f-f34d74041c99.png)
#作ったらこんなの入ってた
![スクリーンショット 2020-05-03 17.33.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283826/64accb3b-a1de-aeee-625a-9de9e0fc2ec4.png)
そのまま起動しても↓の感じで使える
![スクリーンショット 2020-05-03 17.40.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283
[初心者向け]JavaでRecyclerViewのミニマムサンプル
# はじめに
Androidで再利用可能なViewをリストで表示する際はRecyclerViewというウィジットが主流です。
けど最初は複数のパーツが出てきてよくわからなかったのでミニマムサンプルを作ってみます。↓完成イメージ
# 準備
build.gradleにRecyclerViewを追加します。“`java
dependencies {
implementation “androidx.recyclerview:recyclerview:1.1.0”
“`# 登場人物
* Activity
* RecyclerViewを乗っける土台
* RecyclerView
* リストを表示するウィジット
* ViewH
[Kotlin]Firebase InAppMessagingの実装
# はじめに
– 実装なしで画面表示時にダイアログを出せます# 画面
ダイアログが出た際の表示# 実装
applicationレベルのgradle“`build.gradle(app)
dependencies {
〜// core
implementation “com.google.firebase:firebase-core:17.4.0”
// InAppMessaging
implementation ‘com.google.firebase:firebase-inappmessaging-display:19.0.6’
}
“`Activityの実装なし
# おわりに
別アプリでは問題なく、初回インストール直後の起
スマホと洗濯バサミでWebカメラのない人を救いたい
# DroidCamをインストール
# 洗濯バサミでスマホを固定する!
![IMG_20200503_205700.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129639/9997da4b-6b38-9cf9-a636-9bce084b9939.jpeg)
モニターに指したり、ジャンプの上に置いたりして調節する。
良いビデオ会議ライフを
mockk でのエラー対処 io.mockk.MockKException: no answer found for: Observer(observer#2).onChanged
# 発生した問題
Test に Success と表示されるもののエラーが大量に表示される。
どうやら onChanged で怒られているらしい。“`
io.mockk.MockKException: no answer found for: Observer(observer#2).onChanged
“`# 解決策
mockk している observser の振る舞いをしていしていなかったのが問題らしい。
下記のように @RelaxedMockK を指定してあげると動作を定義しなくてもエラーを出さなくなる。“` Kotlin:MainViewModelTest
@RelaxedMockK
private lateinit var observer: Observer>
“`ViewModel のテストのソースコード : https://github.com/higuuu/higuuu-github-api/blob/test/mockk-viewmodel/app/src/test/java/c
Delphi10 でTwilio apiを叩いてSMSメッセージを送る
#はじめに
Delphi10 お試しシリーズ第4弾
今回は Twilio のapiを使ってSMSメッセージを送ってみました。
全く同じソースでWindows、Android共に動作します。(FireMonkey万歳!)#Twilioアカウント取得
事前にTwilioのアカウントを取得しておきます。
方法はググってください。無料トライアルのアカウントがありましたので
そちらを使っています。
アカウントをとると約1600円($15?)のトライアルバランスが付加されました。
電話番号をとると107円($1?) SMSを送ると1通につき9円掛かるようです。
SMS送信に必要なのはAccount SID,AUTH TOKEN,電話番号の3つです。#画面作成
以下の画面イメージの様に必要なコンポーネントを配置します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625152/fae464de-abd5-2f54-2ada-01bfb14c16c9.png)
#ソースリスト
“`Pa
Dagger2 でのエラー対処 kotlin.UninitializedPropertyAccessException: lateinit property mainViewModelFactory has not been initialized
# 発生した問題
Dagger2 で AppCom
@Injectでの依存関係の定義
@Module, @Providesで依存関係を解決するためのインスタンスの提供
@Componentで複数のModuleを用いて依存解決用の Object の生成
上記のことを行ったにもかかわらず、初期化ができていないと下記のエラーが発生する“`
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.higuuugithubapi/com.example.higuuugithubapi.main.MainActivity}:
kotlin.UninitializedPropertyAccessException:
lateinit property mainViewModelFactory has not been initialized
at android.app.ActivityThread.performLaunchAct
Dagger2 でのエラー対処 java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasAndroidInjector
# 発生した問題
Dagger2 を導入したいが下記のエラーがでて、うまくいかない
どうやら `AndroidInjection.inject(this)` でエラーが発生している模様“`
java.lang.RuntimeException: android.app.Application does not implement dagger.android.HasAndroidInjector
“`# 解決策
Manifest に Application クラスを継承したクラスを書いていなかったのが問題
App クラスを追加したら解決した。“`:AndroidManifest
眺めて覚える C# Xamarin Forms(11) ListView Programmatically
#スマートフォンで一番使うリストビューを解説します。
##前回に続いてC#バージョンです。Programmatically
##空のプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/3b95bcd3-0913-1b33-aa92-b5c53426f22c.png)##モバイルアプリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/b5a27fb1-beee-2eeb-0dd6-125be138bcf6.png)
##プロジェクト名を指定して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/e6487bb4-6e84-5033-e966-57f9157345d8.png)
##空白を選択してOK
![
Androidアプリ:イベントとリスナをまとめてみる
前回
[新人がAndroidのビューってものをまとめてみる(初心者Androidアプリ開発)](https://qiita.com/kkhouse/items/2a8cc36a6c42e06e16cb)の続き。。。
##はじめに
入社三か月のペーペーです。androidアプリ開発勉強中でまとめてます。
今回は、イベントとリスナについて。鬼超基礎ですので、超初心者用だと思っていただけるとありがたいです。。
##今回でてくる言葉たち
– イベント
youtubeのアプリアイコンをタップしたら、youtubeが開くじゃないですか。
このアプリタップするっていうユーザー操作のことをイベントって呼んでます。– イベントハンドラ
youtubeのアプリをタップしたら、youtubeが開くじゃないですか。
このアプリタップするっていうのがイベント。
youtubeが開くっていう処理のことをイベントハンドラていいます。– リスナ
androidさんは、youtubeがいつタッチされてもいいように見張っています。
このじーと見張っていることをリスナという。前回の言葉たち
眺めて覚える C# Xamarin Forms(10) ListView
#スマートフォンで一番使うリストビューを解説します。
##空のプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/3b95bcd3-0913-1b33-aa92-b5c53426f22c.png)##モバイルアプリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/b5a27fb1-beee-2eeb-0dd6-125be138bcf6.png)
##プロジェクト名を指定して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/e6487bb4-6e84-5033-e966-57f9157345d8.png)
##空白を選択してOK
![image.png](https://qiita-image-stor
【Kotlin】Fragmentのサンプル
Activityは画面遷移みたいなイメージだけど、
Fragmentは同じ画面で部品が呼応しあうイメージ。また例によってこの本から勉強してみた。
https://www.sbcr.jp/products/4797395808.html#サンプルアプリを作成
このような感じで、ボタンを押すフラグメントの領域と、ボタンが押されたらカウントアップするラベルのフラグメント領域を作ってみる
##ソースコード
・ktファイル
MainActivity.kt : メインの処理。他の二つのフラグメントを制御する。
ButtonFragment.kt : ボタンフラグメントを制御する。
LabelFragment.kt : ボタンフラグメン
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ページ。
今後も頻度高く更新していきたいページなので、アプリ内に埋め込むのではなく、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
<