Android関連のことを調べてみた2023年01月24日

Android関連のことを調べてみた2023年01月24日
目次

Windows subsystem for Androidの導入

## はじめに
windows11ではwindows subsystem for Androidが利用可能です。
subsystemではapkファイルをインストールし、直接アプリを起動できます。

必要スペック:Windows 11のバージョン22H2以降のスペックにしか対応していません。(8世代以降のcore i7など)

## 手順
今回はAmazon アプリ storeをインストールし、kindleやその他のapkを導入します。

1. Micrrosoft Storeより、「Amazonアプリストア」をインストールします。
※再起動を促されて、再起動をしてもこちらで素直にインストールできない場合があります。
(何の設定弄ったか忘れたので、また追記します。)

2.次に、**Amazon アプリストア**より、kindleをインストールします。(Microsoft storeのはインストールできません。)

## apkの直接インストール
※WSA_Pacmanなるソフトウェアを使うと、D&Dで簡単にインストールできるそうな。

まずは、adbコマンドを必要としますので、[SDK

元記事を表示

【Android】locationフィールドにGeoPointが使えなかった時の対処法

# はじめに

次のように、`location`フィールドに対して`GeoPoint`のインスタンスを設定して、データを追加しようとしました。

“`kotlin
val data = hashMapOf(
“createdAt” to FieldValue.serverTimestamp(),
“location” to GeoPoint(0.0, 0.0),
)

val collectionReference = firestore
.collection(“records”)
.document(recordId)

val reference = collectionReference
.add(data)
.await()
“`

ところが、上記の処理を実行してみるとエラーが発生しました。

“`shell
Found conflicting getters for name getDefaultInstanceForType on class com.google.type.LatLng
“`

# エラーの理由

元記事を表示

Flutter の in_app_purchaseでGoogle Play Consoleで課金アイテムを作ったのに「The store is unavailable」

# 経緯
FlutterでAndroidのリリースビルドのために準備を済ませて、
`flutter build appbundle`

で.aabファイル(App Bundle)を作成し、Google Play Consoleにアップロードして、アプリを作成したのち、課金アイテムを作成しました。

そしてFlutterのin_app_purchaseというパッケージの使用例
(https://github.com/flutter/plugins/tree/main/packages/in_app_purchase/in_app_purchase)
を使用したところ、
FlutterのUIで
「The store is unavailable」
との表示が出ました。

# 解決策
Android Studioで
Create Device > Google Play Storeのアイコンマークがついているデバイス > 作成

Google Play Consoleで
課金機能を実装したいアプリ > テスト > 内部テスト > テスター作成 > リンクを取得

こちらでAndroid S

元記事を表示

【Android】Barrierとは【kotlin】

# はじめに
前回 [【Android】Guidelineとは【Kotlin】](https://qiita.com/Tsubasa12/items/04a3676922cbfe2a7ba3) こちらの記事でGuidelineについて書きましたが、今回はそのGuidelineを調べている中で見つけた
Barrierについて調べたものを記事にします。

# Barrier
Guidelineでは親Viewを基準にして補助線を引くものでしたが、
Barrierは子Viewを基準に補助線を引くものです。

constraint_referenced_ids にViewを指定することでそのViewを基準にして補助線を引くことができます。
barrierDirection でそのViewのどの位置を基準にするか指定でき、
barrierMargin でその基準からMarginを指定することができます。


“`

元記事を表示

【Android】Observableで監視をしながらレイアウトを変える方法

# はじめに
こんにちは!
アプリ作成にボタンってほぼ必ずと言っていいほど使用しますよね?
そしてボタンを切り替えることをするかもしれないです。
例えば、ある処理を実行した後にボタンのグレーアウトを解除するとか、
ある処理の時はこのボタンを表示して別の処理の時はこのボタンを表示させるとかですね。
もちろんこれはボタンだけではなくテキストとかでも色々言えることだと思います。
この時まだ表示・非表示ならsetVisibility、文字列切り替えならsetTextとか使っていませんか?
もちろん場合によっては使用することもあるかもしれないですが、もし知らないのであればこれから書いていくObservableで切り替える方法を知っておくと便利かもしれないです。

# Observableとは
ここではObservableはざっくりにしておきましょう。
話は戻りますがObservableとは値が変更された時に値が変更されたことを通知できるものになります。
これはString型やBoolean型に限らず例えば ”Hello” → “would” に変わった時 true → false に変わった時な

元記事を表示

Google Play Consoleで新しいサブスクリプションの基本プラン作成時に「 予期しないエラーが発生しました。もう一度お試しください」

Google Play Consoleで新しいサブスクリプションの基本プランの値段付けが終わって保存しようとしたら、

「予期しないエラーが発生しました。もう一度お試しください」と表示されました。

ブラウザのキャッシュやクッキーを削除しても解決しませんでした。

# 解決策

国 / 地域の公開設定の管理

と書いてあるボタンをクリック

チェックボックスを全て外し、日本だけ有効にする。

元記事を表示

JetpackComposeでタップしている間だけテキストの色が変わる方法

JetpackComposeでタップしている間だけテキストの色が変わる方法の簡単なサンプルを紹介いたします。

# 実装サンプル
“`ClickText.kt
@Composable
fun ClickText(
modifier: Modifier = Modifier,
onClick: () -> Unit = {},
text: String,
interactionSource: MutableInteractionSource =
remember { MutableInteractionSource() }
) {
val isLinkTextPressed by interactionSource.collectIsPressedAsState()
Text(
modifier = modifier
.clickable(
onClick = { onClick.invoke() },
indicati

元記事を表示

【UserLAnd】AndroidでUbuntu環境構築

# はじめに
家にPCがないのでスマホ(Android)で開発環境を構築しようと考えました。

# 動作環境
* Sony Xperia 10 IV
* Android OS 12
* UserLAnd 3.1.4
* Ubuntu 20.04.5 LTS

# UserLAndをインストール
PlayストアでUserLAndを検索してインストールします。

# Ubuntuをインストール
UserLAndを起動してUbuntuをインストールします。

# パッケージの更

元記事を表示

[Android] NFCタッチからアプリ起動と同時にタグを読み込む

# やりたいこと

以下の記事で NFC タグをタッチしてアプリを起動するところまでできました。
[[iOS][Android] NFCタグを使ってスマホアプリを起動する](https://qiita.com/sunskysoft/items/405acd92609c0e5772e0)
次に、起動時にそのままタグを読み込みたいと思います。

# 事前準備

[[iOS][Android] NFCタグを使ってスマホアプリを起動する](https://qiita.com/sunskysoft/items/405acd92609c0e5772e0)を参照してください。
ホーム画面でNFCタッチすると、アプリが起動するまでの動作を行います。

# 起動時にタグ情報を読み込む対応

起動する ActivityのonCreate()で Intent を受け取り処理します。
NFC に書かれている Data(MIME) と AndroidManifest.xml の intent-filter が一致することで、アプリ起動時に ACTION_NDEF_DISCOVERED アクションを伴いActiv

元記事を表示

targetSdkVersionを31にするときの3つの注意点

2022年11月から、GooglePlayストアにアプリのアップデートを公開する場合、targetSdkVersionを31にしないと公開できなくなりました。

機能を追加したし、あとはtargetSdkVersionを上げるだけ・・・
ってビルドできない!動かない!

という事に今回遭遇したので、targetSdkVersionを31にした時の注意点3選を書いていきたいと思います。

# 1.Android 12端末でアプリ起動時のIllegalArgumentExceptionに対応する
Android 12端末で起動しようとすると以下のエラーが吐かれてアプリ落ちします。
Android 11以前であれば普通に起動します。
“`
Fatal Exception: java.lang.IllegalArgumentException: com.highcom.todolog: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified whe

元記事を表示

新機能開発時に役立つ!エラーなく新しいフィールドをFirestoreのドキュメントに追加する方法

# はじめに

アプリのアップデートを行う際に、新しいバージョンでは特定のドキュメントに新しいフィールドを追加したい場合があります。

例えば、古いバージョンのアプリで想定している`users`ドキュメントが次のようなスキーマだったとします。

“`ts
{
“name”: string;
“createdAt”: Timestamp;
}
“`

そして、新しいバージョンのアプリでは、このドキュメントに`address`フィールドを追加したいと考えます。

“`ts
{
“name”: string;
“createdAt”: Timestamp;
// 新しいフィールド
“address”: {
postcode: string;
country: string;
state: string;
city: string;
address1: string;
address2: string;
}
}
“`

このとき、新しい

元記事を表示

AndroidでSharedPreferenceのxmlファイルはインストール直後にはできていない

# SharedPreferenceのxmlファイルができるタイミング

[Androidで設定画面を作ってみる](https://qiita.com/cozyk100/items/540ba3c9575d4955e014)でAndroidX Preference Libraryを使って設定画面のサンプルを作りました。業務でHTTPで通信するようなアプリを開発していて、HTTPの送信先のURLをAndroidX Preference Libraryを使って作りました。

ここで、気がついたのですが、

**SharedPreferenceのxmlファイルはインストールした直後はできていない**。設定画面(PreferenceFragmentCompatのFragment)が呼ばれたタイミングで作られます。(もしくは、SharedPreferenceに初めて、putXxxxしたタイミング。ま、言われてみれば当たり前と言えば当たり前)

標準では、ここにできているはずです。
“`
/data/data/{パッケージ名}/shared_prefs/{パッケージ名}_preferences.

元記事を表示

[C++]タッチで3Dオブジェクトを移動させる計算方法

# 概要
スマホに3Dの空間が描かれているとして、オブジェクトをタッチして移動させる計算方法を考えてみた。
移動は、cameraのある平面に対して平行に移動させる。

# 前提
文法はC++で記載しているが、計算方法のアイデアが主な目的なので、コードはあまり気にしなくてよいかも。
OpenGLやVulkanの座標系を想定し、cameraはこちら向きを正とする。
https://learnopengl.com/Getting-started/Camera

# 結論
忙しい人向け。
“` c++
glm::vec4 Camera2TouchScreen(glm::vec2* touchPos)
{
//screen space
float x = touchPos[0].x / width;
float y = touchPos[0].y / height;
//screen space to clip space
x = x * 2.0f – 1.0f;
y = y * 2.0f – 1.0f;
//clip space to view space
g

元記事を表示

Android 非公開APIの見分け方

# 非公開APIとは
AndroidにはAPIの種類があります。
殆どの方が使用するのは、publicAPI(AndroidStudioで開発する際誰もが使用できるAPI)だと思います。
[Android Code Serarch UserHandle#myUserId()](https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/os/UserHandle.java;l=551?q=UserHandle.java)を見てみるとMethodの上に@SystemApiや@hideやらついています。

これらのAPIは普段3rdParty(GooglePlayからインストールするようなApp)では使用できないAPIになります。
じゃなぜこれの説明をするのって??
日々の業務の中でPre-inAppを作成しており、そのAppを配信化する事になりました。

しかし!!先ほど説明した非公開API(@SysteApiや@hideがついているMethod)は使用しな

元記事を表示

実機&Androidエミュレータ上のサーバへの接続確認

PCのローカルで立てているサーバに対して接続確認したい場合の Local IPアドレスの指定について
ちょっと苦しんだので調査した結果をメモしておく。
以下、xxxx = port番号 を示す。

– PC の Web上(Chrome, Edgeなど) => PCのローカルサーバ のケース
– “http://localhost:xxxx” でOK
– Androidエミュレータ => PCのローカルサーバ のケース
– “http://10.0.2.2:xxxx” 
– https://developer.android.com/studio/run/emulator-networking.html
に記載がある
– Android実機 => PCのローカルサーバ のケース
– Windows のコマンドプロンプトで ipconfig コマンドを打って出てきたIPv4アドレス(ex. http://192.168.0.1:xxxx)

元記事を表示

AndroidアプリでOpenCVを利用しようとした際のGradle Syncエラー対策

# はじめに
Android Application(Java)上でOpenCVを取り込んで動かそうとした際に引っかかったこととその対処のメモです。
ほとんど自分用に備忘録になります。
OpenCV SDKのバージョン:4.7.0

# OpenCVの取り込み
Android StudioへのOpenCVの取り込みはすでに分かりやすくい記載されている方がいるので以下を参照

https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802

# GradleのSync error
参考ページのOpenCVの取り込みを実施し、openCVでモジュール名を設定しFinishしたところGradleのsyncで以下のエラーが発生
“`
Plugin with id ‘kotlin-android’ not found
“`

# 対応策
対処方法について調べていたところ以下に対策の記載があった

https://coskxlabsite.stars.ne.jp/html/android/OpenCVpreview/OpenCVpreview_A.

元記事を表示

Android Studioでのビルドエラー

# 概要
久しぶりにAndroidの新規プロジェクトを立ち上げたら、いきなりビルドエラーを吐いてしまった。

# エラーメッセージ全文

“`
6 issues were found when checking AAR metadata:

1. Dependency ‘androidx.appcompat:appcompat-resources:1.6.0’ requires libraries and applications that
depend on it to compile against version 33 or later of the
Android APIs.

:app is currently compiled against android-32.

Also, the maximum recommended compile SDK version for Android Gradle
plugin 7.4.0-alpha03 is 32.

Recommended actio

元記事を表示

【Android】不労所得のために入れたAdViewで遭遇したエラーを解決するTips

# はじめに

Jetpack Composeを使って、アプリに広告を配置するために`AndroidView`と`AdView`を使用しました。

その際に発生したエラーの解決方法をコードを交えて紹介したいと思います。

# val cannot be reassigned

`adSize`プロパティに、`AdSize.BANNER`を代入しようとしたらエラーが発生しました。

“`kotlin
val cannot be reassigned
“`

こういう場合は`setAdSize()`を使用しましょう。

“`kotlin
val adView = AdView(context).apply {
setAdSize(AdSize.BANNER)
loadAd(AdRequest.Builder().build())
adUnitId = “ca-app-pub-xxx”
}
“`

# The ad size and ad unit ID must be set before loadAd is called.

`loadAd()`の呼び出し

元記事を表示

AndroidのApp Linksで複数ホストを設定する時の注意点

AndroidのApp Links対応にあたり、AndroidManifest.xmlに対応するスキーム/ホスト/パスなどを設定すると思います。1つのアプリで複数のホストに対応する場合にハマった点があったため、それについてまとめます。

### ?ゴール
アプリの`MainActivity`を次の2つのURLパターンから起動できるようにするのをゴールとします。それぞれのURLは異なるホストになっています。

– `https://foo.example.com/users/.*`
– `https://bar.example.jp/articles/.*`

### ?NGな例
こちらがNGな例です。どこがダメかわかりますでしょうか?

“`xml

元記事を表示

a-3-1-1.Buttonのレイアウト

### a-3-1-1.Buttonのレイアウト

#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)

#### 課題
3. Buttonの背景色を指定したRGBでXMLから指定することができるか。
3. Buttonの枠線を指定したRGBと太さでXMLから指定することができるか。
3. Buttonを制約配置(ConstraintLayout)で指定することができるか。
3. Buttonを列配置(LinearLayout)で指定することができるか。

#### Github

https://github.com/rwakizaka7/AndroidTest

#### テスト実装

“`kotlin:ButtonTestActivity.kt
package com.example.androidtest

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.examp

元記事を表示

OTHERカテゴリの最新記事