- 1. Reverse Geocoder(逆ジオコーダー)
- 1.1. 環境
- 1.2. やり方
- 1.2.1. 買い切りアイテム用にGoogle Play Billing Library v3のラッパーライブラリを作成
- 1.2.2. 【Fiddler Everyone】 Android端末のブラウザの通信キャプチャの方法
- 1.2.3. 【Kotlin】Glideの画像データキャッシュを更新したい
- 1.2.4. Androidアプリのクラッシュ対策にやったこと
- 1.2.5. [Android]Vector Assetに枠線をつける方法
- 1.2.6. [Android]テストって何のためにやるのか分からないよね!(初心者の叫び)
- 1.2.7. Codelabsの通知機能の実装をViewModelを使って書き換えてみた
- 1.2.8. エラー Couldn’t inline method call ‘userProfileChangeRequest’ into
- 1.2.9. Kotlinのタップで画面遷移、長押しでクリップボードにコピー
- 1.2.10. Kotlinで◯日前という表記をスマートに実装
- 1.2.11. ActivityResultAPIのテストを書く
- 1.2.12. Flutter アプリ内課金(サブスクリプリプション)の実装
- 1.2.13. ListView用のカスタムアダプターの中身を逆順にするときにおこった問題について
- 1.2.14. MPAndroidChartでリアルタイムプロットサンプル(kotlin)
- 1.2.15. KotlinでFirestoreのTimestampをDate型に変換
- 1.2.16. FirebaseMessagingのトークンを取得する際のエラー解消方法
- 1.2.17. AsyncTaskを使った非同期処理
- 1.2.18. HMSとAndroid OSバージョンについての考察
- 1.2.19. 【Unity】GoogleAdMobでiOS14対応したときのトラブル解決
Reverse Geocoder(逆ジオコーダー) android × kotlin
Reverse Geocoder(逆ジオコーダー)
kotlinで書いている記事が少なかったので書き残して起きます。
逆ジオコーデイングする上で少し沼ってしまったので
誰かの参考になればいいかなと思っています。
*自分は実務経験がない開発者なので間違っている場合があると思いますが
そこら辺はご容赦ください。
環境
- 言語
- kotlin
- フレームワーク
- Android Studio 4.1.2
やり方
事前準備
経度緯度を取得しておく
latitude(緯度)とlongitude(経度)
逆ジオコーダー
“`kotlin.MapActivity.kt
fun getAddress(latitude: Double, longitute: Double) {
val strAddr
買い切りアイテム用にGoogle Play Billing Library v3のラッパーライブラリを作成
# はじめに
Androidの課金ライブラリ(Google Play Billing Library)をv3に上げる必要が出てきました。
期限は新規アプリの場合は2021年8月1日、アプリ更新の場合は2021年11月1日です。
かなり古くから自作アプリの課金システムを放置していたので思い切って作り直してみました。eclipseからAndroidStudioに変わってからまともに触ったことがなかったので、
AndroidStudioやGradleの勉強も兼ねて作成したので構成がおかしかったらすみません。# 公開リポジトリ
– [AndroidBillingTest – GitHub](https://github.com/taiki-f/AndroidBillingTest)**※ライセンス表記をしております。ライセンスの範囲内でご自由にご使用ください。**
**※買い切りアイテム用に作成した物ですので定期購入アイテムや消費アイテムには対応しておりません。**# ライブラリの簡単な使い方
最初にアイテムリストを作ります。
第1引数が課金の結果を受け取るクラス、
第2
【Fiddler Everyone】 Android端末のブラウザの通信キャプチャの方法
## Android端末でのブラウザの通信をFiddler Everyoneで取得する
####①Fiddler Everyoneを起動する
####②設定のConnectionsを開く
ポートは初期設定のままにし(変更したい場合はしておく)、Allow remote computers to connectにチェックを入れる
![fid_everywhere_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1035014/94320f56-c107-4f2f-7ffb-88bdc1fd2334.jpeg)
SAVEを押すと、ファイアウォールの設定がされていない場合に確認が入るが、アクセスを許可する
#### ③Androidのプロキシ設定を行う
Fiddler Everywhereとandroidのwi-fiを同じに設定する
wi-fiの設定から使用しているwi-fiの設定アイコンを選択
![fid_everywhere_3.jpg](https://qiita-image-store.s3.ap-
【Kotlin】Glideの画像データキャッシュを更新したい
#Glideは同じURLからの読み込みだとキャッシュを利用する
Glideのキャッシュ機能は読み込み回数を減らせて便利です。
しかしサーバーのデータを更新してもURLが同じなら、キャッシュから読み込んじゃうので、更新したデータが反映されずに困ることがあります。
以下に回避方法を2種類記載します。##回避策1:キャッシュからの読み込みをスキップする
“`Kotlin
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.NONE) //ディスクキャッシュをスキップ
.skipMemoryCache(true) //メモリキャッシュをスキップ
.into(view)
“`この方法でキャッシュをスキップして更新されたデータを読み込むことはできます。
しかし元々保存されているキャッシュが更新されるわけではないので、毎回キャッシュをスキップしないと古いデータが表示されてしまします。##回避策2:キャッシュを全削除する
“`Kotlin
//ディスクキャッシュをクリア
//バックグラウ
Androidアプリのクラッシュ対策にやったこと
先日GooglePlayにAndroidアプリをリリースしたのですが、1週間でおよそ20件のクラッシュレポートが上がってきました
レポートは20件ほどありましたが、およそ2件の対策をしましたのでメモしておきます解決の保証はできませんので悪しからず
# やったこと
### TextInputEditTextの実装修正
* noExcludeDescendantsを追加
* hint属性はTextinputLayoutにつける
* setOnEditorActionListenerを削除### MapViewのnullチェックを追加
“`MapActivity.kt
override fun onDestroy() {
try {
binder?.mapView?.onDestroy()
} catch (e : NullPointerException) {
// Send report exception..
}
super.onDestroy()
}
[Android]Vector Assetに枠線をつける方法
初めに
===
AndroidのVectorDrawableを利用することであらかじめ用意されている画像を簡単に利用できます。
そのVectorDrawableに枠線をつける方法をまとめていきます。VectorDrawableの作成
===
Android StudioのVector Assetでデフォルトで作成されるのは以下のようなxmlになります。“`xml
[Android]テストって何のためにやるのか分からないよね!(初心者の叫び) # 取り敢えず、分からんけども、テスト書いてみるか!!しかし・・・
最近、企業さんからいただいたアプリ作成の課題でテストをする必要があり、(別に書かなくても良いのですが、テストコードを書いたほうが品質に気を使っているのだなと評価されるので)
テストの学習を始めました。
早速、Android全書やその他記事諸々を読み始める。
しかし、それらは前提知識がないと読めないので、かなり難しい…
取り敢えず、クラス名の上にカーソルを合わせて、右クリックすると「Show Context Actions」と表示されるので、クリックし、そして、「Create Test」みないなものが出てくると思うので、それもクリックすると、そのクラスに対応したテストクラスができます。
超入門以外の記事を読んで、分かることはこれくらい笑
でもでも、諦めず自分に適したレベルの記事を読み漁りながら、この記事を完成させたいと思います。
### 実機テストで良くね?
まず、ここっすね。色々と記事を読み漁っていると、「なぜ、テストを書くのか?」「弊社では、テストを書く必要性がますます高まっています。」という文
Codelabsの通知機能の実装をViewModelを使って書き換えてみた
## はじめに
[Codelabs タスク1:基本的な通知を作成する](https://developer.android.com/codelabs/android-training-notifications#2)を参考に通知機能を実装してみた。
![notification.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/cde8bdd6-3beb-e4a8-3cb4-fff7d5b40f28.gif)## 通知機能の実装ポイント
### ①通知チャネルを作成する
* チャネルIDを用意
* 通知チャネルのカスタマイズ初期設定(APIレベル26以上に対して)
* チャネルの設定名称
* 通知の優先度(他にも通知が複数あったときの表示位置の優先度)
* バイブ、LEDの色設定
* チャネルの説明文
* 注意事項
* Android8.0(APIレベル26)より古いデバイスはカスタマイズできない。
* Android8.0(APIレベル26
エラー Couldn’t inline method call ‘userProfileChangeRequest’ into
#FirebaseのAuthenticationでユーザープロフィール更新時に謎のバグ
Kotlinでfirebaseのプロフィール更新時に“`
Couldn’t inline method call ‘userProfileChangeRequest’ into
“`っ出てビルドが通らない。
理由は不明だけど、下記でビルドが通ったので、もしものときに誰かの役に立てばと思って書き残します。##バグの出たコード
“`Kotlin
val profileUpdates = userProfileChangeRequest {
displayName = “ユーザー名”
}
“`##バグが回避できたコード
“`Kotlinval profileUpdates = UserProfileChangeRequest.Builder()
.setDisplayName(“ユーザー名”)
.build()
“`
Kotlinのタップで画面遷移、長押しでクリップボードにコピー
###タップでブラウザに画面遷移
“`kotlin:click
view.setOnItemClickListener() { parent, view, position, id ->
var uri = “https://something”
var intent = Intent(Intent.ACTION_VIEW, Uri.parse(uri))
startActivity(intent)
true
}
“`###長押しでテキストコピー
“`kotlin:longClick
var clipboard: ClipboardManager = applicationContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
view.setOnItemLongClickListener() { parent, view, position, id ->
var copyText: String
Kotlinで◯日前という表記をスマートに実装
#Kotlinで時間差を表示したい
Twitterなどで見る、「◯時間前」とか「◯日前」などの表記を簡単に実装したいと思います。
ちなみにこの方法なら、スマホの言語設定に合わせて勝手にローカライズされ、「◯ days ago」といった表記に変わりますので、配信する地域を気にせず使えます。“`Kotlin
var hoge = DateUtils.getRelativeTimeSpanString(指定時刻のミリ秒, 現在時刻のミリ秒, 0)
“`
で◯日前、◯時間前といった表記を取得できます。##現在時刻のミリ秒を取得
ちなみに現在時刻のミリ秒は下記で取得します。“`Kotlin
val now_milisec = System.currentTimeMillis()
“`
ActivityResultAPIのテストを書く
# 概要
`startActivityForResult`と`onActivityResult`が非推奨になったので、`ActivityResultAPI`を使って書き直しました。
で、公式に`Fragment`向けの`ActivityResultRegistry`を置き換えてテストできる方法について触れている箇所があったのですが、https://developer.android.com/training/basics/intents/result?hl=ja#test
`Activity`でテストする場合のことが書いてなかったので調べて対応しました。
# 環境
|ツールなど|バージョンなど|
|:–|:–|
| MacbookPro |macOS Catalina 10.15.7|
|Android Studio |4.1.2|
|Java(JDK) | openjdk version “11.0.10” |
| Koin |2.2.2|
| activity-ktx | 1.2.1|# 対応方法
**Koin**というDIライブラリを使って実現しました。
Flutter アプリ内課金(サブスクリプリプション)の実装
#内容
今回初めて、アプリ内課金(サブスクリプション、以下サブスク)の実装をしたので、忘却録として書きます。
2021/3/12 現在のサンプルコードを使用。
サブスク導入でつまずいた部分のみを記載(2021/03/26現在はiOSのつまずき集のみ)。実装は気が向いたら書く予定。テスト中に何回も購入処理をして、トランザクションが残っていると色々と大変らしいので、[YuKiOさんの記事](https://qiita.com/YuKiO-OO/items/a0fe8e0a256afbb69fc7#%E9%87%8D%E8%A6%81%E8%AA%B2%E9%87%91%E6%A9%9F%E8%83%BD%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88)を先に読んでおくことをおすすめします。
#前提条件
●App Store, Google Play側の準備ができている(サブスクアイテム作成)
●今回はサブスクのみなので、consumable(消耗品)関係は未対応以下
ListView用のカスタムアダプターの中身を逆順にするときにおこった問題について
#問題のコード
“`ListWorkActivity.java
public class ListWorkActivity extends AppCompatActivity implements View.OnClickListener {
private ArrayListlistItems = new ArrayList<>();
private DateArrayAdapter arrayAdapter;
private ListView listView;protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
//listViewにlistItemsをセットしたい
listView = findViewById(R.id.listView);
{…}
/
MPAndroidChartでリアルタイムプロットサンプル(kotlin)
MPAndroidChartを使ったリアルタイム更新グラフのサンプルを作成した。
公式にサンプル(https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/RealtimeLineChartActivity.java)
にあるが、Javaで書かれているため、ここでは公式を参考にKotlinで書いていく。まず、build.gradleにviewBindingの設定とMPAndroidChartのインポート設定を行う。
“`xml:app/build.gradle
…
android {
…
buildFeatures {
viewBinding = true
}
}dependencies {
…
implementation ‘com.github.PhilJay:MPAndroidChart:v3.1.0’
}
…
“`
KotlinでFirestoreのTimestampをDate型に変換
Firestoreで取得したTimestampを、Kotlinで扱うためにDate型に変換します。
簡単です。“`Kotlin:MainActivity.kt
//FirestoreのドキュメントからTimestampデータを取り出す
val firebase_timestamp = document.data[“timestamp”] as com.google.firebase.Timestamp
//Date型へ変換する
val date = firebase_timestamp.toDate()
FirebaseMessagingのトークンを取得する際のエラー解消方法
# エラー
Firebaseのチュートリアルを進めていると、クライアントアプリのインスタンスの登録トークンを取得するステップにあたります。
https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja#retrieve-the-current-registration-token
チュートリアルでは以下の記載があります。
>現在のトークンを取得する必要がある場合は、FirebaseMessaging.getInstance().getToken() を呼び出します。同じくチュートリアルでは、kotlinの場合のコード例が紹介されています。
“`kotlin:
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w(TAG, “Fetching FCM registration token
AsyncTaskを使った非同期処理
メモです。詳細は下記URL先を参照してください。
https://dev.classmethod.jp/articles/asynctask/
HMSとAndroid OSバージョンについての考察
# 背景
Androidのbuild.gradleのminSdkVersionを16以下に設定し、HMSライブラリを導入すると、ビルド時に次のようなエラーが出てきます。“`text
Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library [com.huawei.hms:hwid:5.2.0.300] xxxxxxxxxxxxxxxxxxxxxxx\AndroidManifest.xml as the library might be using APIs not available in 16
Suggestion: use a compatible library with a minSdk of at most 16,
or increase this project’s minSdk version to at least 17,
or use tools:overrideLibrary=”com.huawei.
【Unity】GoogleAdMobでiOS14対応したときのトラブル解決
![iOS14_SKAdNework_error_thumb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401916/c25fd72b-170d-da89-2d33-c6df0d29f26a.png)
今回GoogleAdmobの管理画面にiOS14(SKAdNework)に未対応である旨のエラーが出ており
対応を入れることにしました。その対応を備忘録として残しておきたいと思います。
本文はこちらです
https://tedenglish.site/unity-googleadmob-ios14-trouble/