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

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

エラー Couldn’t inline method call ‘userProfileChangeRequest’ into

#FirebaseのAuthenticationでユーザープロフィール更新時に謎のバグ
Kotlinでfirebaseのプロフィール更新時に

“`
Couldn’t inline method call ‘userProfileChangeRequest’ into
“`

っ出てビルドが通らない。
理由は不明だけど、下記でビルドが通ったので、もしものときに誰かの役に立てばと思って書き残します。

##バグの出たコード
“`Kotlin
val profileUpdates = userProfileChangeRequest {
displayName = “ユーザー名”
}
“`

##バグが回避できたコード
“`Kotlin

val 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 ArrayList listItems = 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/

元記事を表示

2021/3/23 Android System WebViewは何が修正されたのか?

2021/3/23に世間を騒がせた、Android System WebView (Google Playだと ‘AndroidシステムのWebView’ って表記のやつ)、結局、何を修正したら直ったのか気になったので、Gitログを調べた。

* おかしいと報告のあったバージョン: 89.0.4389.90
* 直ったと報告のあったバージョン: 89.0.4389.105

https://github.com/chromium/chromium/compare/89.0.4389.90…89.0.4389.105

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74571/5393e685-c1f2-0f2a-81a1-820968157d39.png)

なるほどわからん。

元記事を表示

AndroidでFirebaseにいちばんシンプルにHelloWorldをInsertする

# はじめに
WebからAndroidに入るような人って、まず、Androidの端末からHelloWorldを、Firebaseに送りたいのよ。なんでかQiitaにもUdemyにもTechpitにもシンプルにミニマルに書いてあるってないのよー

# 前提条件
全部最新版でいい(とりあえず)
・AndroidStudioは一番新しいのを入れろ
・Targets API level 16+ を入れろ
・Uses Gradle 4.1+ を入れろ
・Uses Jetpack (AndroidX) を入れろ
・compileSdkVersion 28+ を入れろ

# Androidプロジェクト作成
## Create New Project
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94562/f5125b45-7783-ac4b-5a9f-c66e0ee380fa.png)
## Empty Activity
![image.png](https://qiita-image-store.

元記事を表示

Kotlinでカスタムしたダイアログからコールバックを受ける

#レイアウトをカスタムしたダイアログからコールバックを受ける
・自分で作ったレイアウトをダイアログアラートに適応します。
・ダイアログでOKボタンが押されたら、メインアクティビティでコメントをprintlnします。

“`Kotlin:MainActivity.kt
//ダイアログ側で設定したインターフェースを実装
class MainActivity : AppCompatActivity(), TestDialogFragment.TestDialogListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//ダイアログの起動ボタン
val btn = findViewById

元記事を表示

[Android][Java]ボタン付きのカスタムセルのListViewを作成する

ボタン付のカスタムしたセルでListViewを作成する方法を記載します。
リスト表示する場合にはRecyclerViewの方が柔軟に様々な事ができますが、その分実装量が多くなるため、簡単に実装ができるListViewについて書いていきます。
完成イメージは以下です。

AndroidStudioで空のアクティビティを作成した状態から始めます。
#1.layout/activity_main.xmlにListViewを定義する
空のアクティビティを作成すると、ConstraintLayoutだけが定義されている状態なので、以下のようにListViewを定義します。

“`activity_main.xml

元記事を表示

[Android/Java] Jetpack LifecycleObserver

Android Studio 4.1.3(windows版) で動作確認しています

Jetpack LifecycleObserverの簡単な説明とサクッと試すためのコードです

Android DeveloperのLifecycleObserverの説明は以下です

https://developer.android.com/topic/libraries/architecture/lifecycle?hl=ja

getViewLifecycleOwner()についてはこちら

https://developer.android.com/reference/androidx/fragment/app/Fragment#getViewLifecycleOwner()

## 確認用コード
各イベント/イベントの引数は省略できます
Lifecycle.Event.ON_ANYはすべてのイベントを受け取れて
Lifecycle.Event.ON_ANYのみ引数でLifecycle.Eventを指定できます
getCurrentState()で現在のLifecycleの状態も取得できます

元記事を表示

【Kotlin 初心者】font-familyで余白が入った場合の対処方法

## font-familyで余白が入った場合の対処方法
font-familyを指定した際に意図しない余白があり困ったので、この記事を書きました:point_up_tone2:

結論から言うと下記のプロパティを書くと解決します。

“`
android:includeFontPadding=”false”
“`

fontによっては初期でandroid:includeFontPaddingがtrueになっているみたいです。
ざっくりとですが、android:includeFontPaddingの初期値がtrue,falseのfont一覧を書きました

| true | false |
| —- | —- |
| noto_sans_cjk_jp_medium | hiragino_kaku_gothic_pro_n_w_3 |
| – | yu_gothic_bold |
| – | roboto_medium |

元記事を表示

BindingAdapterで「Caused by: java.lang.IllegalStateException: Required DataBindingComponent is null」

DataBindingでBindingAdapterを使っていると、以下のエラーが発生することがあります。

“`kotlin
Caused by: java.lang.IllegalStateException: Required DataBindingComponent is null in class ActivityMainBindingImpl.
A BindingAdapter in com.example.sample.BindingAdapter is not static and requires an object to use, retrieved from the DataBindingComponent.
If you don’t use an inflation method taking a DataBindingComponent, use DataBindingUtil.setDefaultComponent or make all BindingAdapter methods static.
“`

これは`@JvmStatic`がないことに

元記事を表示

【IOS , Android】React-Nativeで設定画面に遷移する

## 前提条件
– React-Nativeの環境を構築済み
– エミュレーターをIOSとAndroid両方立ち上げられる

## 実装方法
わかりやすいようにonPressした際に設定画面に遷移させます
下記ではButtonを押しても特に何も起きません

“`js:App.js
import React from ‘react’;
import {StyleSheet, View, Button} from ‘react-native’;

const App = () => {
return (

元記事を表示

OTHERカテゴリの最新記事