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

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

AlertDialogのデザインや色を変更する | Kotlin

前の記事でAlertDialogとNumberPickerの実装方法について書いたけど、
今回はAlertDialogのデザインや色の変更方法について残しておく:raised_hands:

AlertDialogの
テキストカラー、メッセージカラー、背景色、ボタン背景色、ボタン位置
とかを変更していきたい!!!

前回記事(AlertDialog+NumberPickerの実装)はこれ↓

https://qiita.com/hanaaaa/items/f02fedc7fd6b85b0b153

## 完成図
前回の記事で出来上がったダイアログがBeforeで、
今回色々いじった結果がAfterとなってる。
でも前回の記事見なくても、AlertDialogのデザインや色を変更する分には問題ない。

Before
![シンプルダイアログ.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2499099/3da8ed96-0cf0-dda5-a9f8-e281ba3038d8.jpeg)
After
![

元記事を表示

年月選択可能なダイアログ(Numberpicker+AlertDialog) | Kotlin

はじめに、
DatePickerで”年月”選択可能なダイアログを実装しようと
思っていたのに、全然できず。どうしても”年月日”になってしまう。
年度選択に使いたかったのに!!!日!!!日は入ってほしくない!!

結局、DatePikerでは日を除くことは出来ないんだ…:frowning2:
ってことで、NumberpickerをAlertDialogにのせた。

これからもAlertDialogを使う機会は全然あるので、全部残しておく。

## 完成図

①「年月表示」のボタンを押す
![ボタン表示.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2499099/07f8f32b-e67e-bab0-25db-1a976b3ee712.jpeg)
②年と月を選択できるダイアログが表示される
![シンプルダイアログ.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2499099/81092a78-787b-1c07

元記事を表示

サブスク始めてみませんか?Google Play Billing Libraryの簡単なまとめ

# はじめに

自分が開発しているAndroidアプリに、アプリ内購入機能を実装したい衝動に駆られました。
Androidアプリにアプリ内購入機能を実装するためには、Google Play Billing Libraryを使ってロジックを実装していく必要があります。

しかし、これがなかなか複雑で難しい。

サンプルコードをみてみても、どこが出発点でどこまでが前処理で、どこからが実際の購入フローなのかよくわからない箇所が多くありました。

そこで今回は、自分のためにGoogle Play Billing Libraryを使って課金機能を実装するのに必要な各クラスの意味やインターフェースについての解説を簡単にまとめてみようと思います。

Google Play Billing Libraryを用いた具体的な実装方法については、以下のコードラボとリポジトリを参照してください。この記事と照らし合わせながら読んでいくと理解が深まると思います。

https://codelabs.developers.google.com/play-billing-codelab#0

https://gith

元記事を表示

【Android】assetsフォルダにあるテキストファイルを読み込む方法

“` Kotlin
fun readFile(fileName: String): String {
var text = “”

try {
val inputStream = context.assets.open(fileName)
text = inputStream.bufferedReader().use {
it.readText()
}
} catch (e: Exception) {
// エラー処理
}
return text
}
“`

`val inputStream = context.assets.open(fileName)`でassetsフォルダにある`fileName`ファイルを読み込みます。
`fileName`には拡張子を含んだ名前を渡します。
`text`には読み込んだテキストファイルの中身(改行も含む)が入ります。

元記事を表示

@Immutableと@Stableの使い分け

# 初めに
今回は、JetpackComposeで実装する上で割と重要な@Immutableと@Stableアノテーションについて書いていこうと思います
### 本文
自分がどういうふうに使い分けてるかというと下記のようになります
利用するクラスが、絶対不変である場合は@Immutableアノテーションを付与。
内部にState等を保持していて絶対不変とは言えない場合は@Stableアノテーションを付与。

こうすることで、@Immutableアノテーションの場合はcompose compilerが変更はないということを理解してrecomposeがスキップされるようになります。
逆に、@Stableアノテーションをつけていると値の更新をcomposeに通知しながら、recomposeを減らしてUIの更新を行うことができます。

### 最後に
最近Jetpack Composeで実装している際にアノテーションのレビューをいただき自分が調べたものを備忘録的に残しておこうと思い書きました。
どなたかのお役に立てれば幸いです

元記事を表示

[Android] [Kotlin] Spinnerの初期値項目を文字列で選択する方法

### はじめに
spinnerの初期値項目を設定するときにsetSelectionを使いますが、この引数は(position: Int)となっていて
ちょっとめんどくさいと思いました。
setTextみたいに入れて自動的にリストにある同名の項目を初期値設定にしたい方におすすめです。
javaでの方法があったので、kotlinにしてあげたものです。

###
“`.kt
val spinner: Spinner = findViewById(R.id.spinner)
spinner.setSelection(setSelection(spinner, “文字列”))

private fun setSelection(spinner: Spinner, item: String): Int {
val adapter = spinner.adapter
var index = 0
for (i in 0 ≦ until < adapter.count) { if (adapter.getItem(i) ==

元記事を表示

Jetpack Compose副作用 関数整理

### 副作用
[副作用(プログラム)Wikipedia](https://ja.wikipedia.org/wiki/%E5%89%AF%E4%BD%9C%E7%94%A8_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0))
>プログラミングにおいて、式の評価による作用には、主たる作用とそれ以外の副作用(side effect)とがある。 式は、評価値を得ること(※関数では「引数を受け取り値を返す」と表現する)が主たる作用とされ、それ以外のコンピュータの論理的状態(ローカル環境以外の状態変数の値)を変化させる作用を副作用という。

“` Kotlin
fun sideEffect(){
anyGlobalValue++ // 副作用
}

fun getValue(): Int {
return anyGlobalValue
}
“`
こういうの。
getValueをいつ呼び出しても同じ値が返ってくる状態にしておくのが副作用がないプログラム。いつ呼び出しても同じ値が返ってくる=>参照透過ともいう。

[Co

元記事を表示

【Android】別アプリのAARを回避して、起動中のアプリでNFCのインテントを処理する方法

# はじめに

この記事は、Android端末がNFCを読み取った際にAndroid Application Record、通称AARが記録されていれば、その値に基づいて紐づくアプリを起動またはGoogle Play Storeに移動することを防ぐための方法をまとめたものです。

経緯として、NFCの読み取りと書き込みを行うアプリを開発していたところから話は始まります。
ビルドバリアントごとにパッケージ名を変更するよう**build.gradle**で設定していたため、ビルドバリアントを変更した際に、別のパッケージ名でAARを書き込んだNFCを読み取るとそのアプリをインストールするためにGoogle Play Storeを開いてしまうという問題に直面していました。

LogCatを確認すると、次のようなインテントが発行されていました。

“`
ActivityTaskManager system_server I START u0 {act=android.intent.action.VIEW dat=market://details?id=com.takagimeow.examp

元記事を表示

Quick share / internal app sharing / 内部アプリ共有でaab、apkをURLで共有する

今まであった内部テストとは別に、internal app sharing upload pageというのがあるので共有しておきます。
aab/apkの突発的な共有が楽になるという感じだと思います

* 基本的にはinternal app sharingにアップロードする感じっぽい。
* そのaab apkのパッケージ名の権限があるアカウントからしかアップロードできない
* Release > Setup > Internal app sharingからUploaders and testers tabがあり、アップロードできるアカウントを追加できる。
* バージョンコードが重複しても大丈夫
* app bundle explorerなどに入らない
* なんの鍵で署名されていてもOK
* アップロードしたファイルのリンクを作ってくれる
* リンクは60日で失効

Quick share / internal app sharing upload pageのページ

https://play.google.com/console/internal-app-sharing

元記事を表示

【Android】onCreate()の外側でViewModelを使いたい場合の初期化方法

# はじめに

公式のドキュメントでは、`onCreate()`内で`ViewModel`をリクエストすることが推奨されています。

> 通常は、アクティビティ オブジェクトの onCreate() メソッドが最初に呼び出されたときに、ViewModel をリクエストします。

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

`onCreate()`で`ViewModel`を初期化する場合は次のようになるでしょうか。

“`kotlin
import androidx.activity.ComponentActivity
import androidx.activity.viewModels

class ExampleActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(saved

元記事を表示

kotlinのラムダいろいろ(メモ)

## 記事が参考になりそうな人
– ラムダがよくわからんくなる人


### 変数に関数を格納する
“`
fun foo(){
println(“Hello”)
}
“`
を変数に格納したいときは(関数を呼び出すんではない)

“`
val aaa = ::foo
“`
で格納できる
![スクリーンショット 2023-01-17 21.00.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731109/aefb08d9-2ae9-628e-2a82-786527d9ea06.png)


### funを使わず関数をつくる
“fun”を使わずに関数を定義するには
“`
val foo = { println(“Hello”)}
“`

![スクリーンショット 2023-01-17 21.00.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731109/f07cdfcf-7049-

元記事を表示

AffinityDesignerでエクスポートしたsvgファイルをAndroid Studioでインポートしたときに崩れてしまった場合の対処法

# はじめに

僕は普段Androidアプリのアイコンを作成するときは、Affinity Designerを使用します。

https://affinity.serif.com/ja-jp/designer/

しかし、Affinity DesignerでエクスポートしたSVGをAndroid Studioでインポートしたときに度々デザインが崩れてしまう現象が発生していました。

今回は、次のアイコンを作成したときに発生した問題について解決方法が見つかったのでまとめていきたいと思います。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/61c39c57-3548-10c0-1f00-1eaec75390f7.png)

# Affinity Designerの問題

まずは、エクスポートした上記のSVGファイルをAndroid Studioで読み込んだときの画面をご覧ください。

![1.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

Androidの通知アイコンが指定通りの色にならない問題

# Androidの通知アイコンが指定通りの色にならない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134740/9613993b-acc4-6ed9-b275-1dbd51cf9ab2.png)

Androidの通知アイコン(①)が指定した通りの色にならず、なぜか黒ずんでしまうので原因を調べたら、Androidの仕様によるものでした。

“`kotlin
val builder = Notification.Builder(context, id)
.setColor(ContextCompat.getColor(context, R.color.colorAccent)) // ←この色が正しく出ない
“`

## Androidの仕様が原因?
どうやら、背景色とコンテンツ色の**コントラスト比が一定以下だと自動的に補正される**というAndroidの仕様があるらしい。
公式ドキュメントの記述を見つけられなかったが、ソースを見たところでは **4.5** がしきい値のよう

元記事を表示

GitHub ActionsでBaseline Profilesを生成する

[android-emulator-runner](https://github.com/ReactiveCircus/android-emulator-runner) のような Android Emulator の Actions を使うパターンもあるのですが、今回は Gradle Managed Device を使っての Baseline Profiles を生成する Actions を作ってみます。

## 実装

“`build.gradle
dependencies {
implementation ‘androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha09’

}
“`

`benchmark-macro-junit4` は 1.2.0 の alpha 版を使用します。
これは benchmark モジュールのテスト実行時に Baseline Profiles の生成以外のテストが走ってしまうのを防ぐ機能が 1.2.0 以降に入っているためです。

“`benchmark/build.g

元記事を表示

AndroidのエミュレーターでFirebaseがタイムアウトになる事象の対応

# 背景
– Flutterアプリを開発中に複数デバイスで動作確認を行っていた際、Androidのエミュレーター使用時のみFirebaseへの接続がうまくいっておらず、データが更新されないことが起こった。
– ちなみに前日までは同じエミュレーター上で正常に動いていた。

# エラー内容
“`
Could not reach Cloud Firestore backend.
Backend didn’t respond within 10 seconds
“`

# 解決方法
– どうやらエミュレーター側の問題のようで、新しいエミュレーターを作成してインストールすることで、Firebaseに接続することができた。

# 参考
– [Firebase doesn’t work on Android Studio Emulator](https://stackoverflow.com/questions/73370728/firebase-doesnt-work-on-android-studio-emulator/73584389#73584389)
– [Could not re

元記事を表示

抽象クラスとインターフェースについて | Kotlin

抽象クラスとインターフェースについて、
やっと納得できた!!!(はず)

今まで調べて雰囲気理解して見様見真似で使用して、また調べて…を繰り返してた…(抽象クラスに限ったことではないけど)

なので記録として残しておく:unamused:
これで全然違うよって思ったら、教えてください。お願いします。

## 1.抽象クラスと抽象メソッド
#### 抽象クラスとは
・継承されることを目的としたクラス
・インスタンス化できないクラス(抽象的であるので具体化は無理)
#### 抽象メソッドとは
・中身の実装ができないメソッド
・抽象クラスを使用したクラスは、強制的に使うことになる

#### 定義方法
“`kotlin:MainActivity.kt
abstract class Engine(name:String){
var engineName = name
abstract fun speed():Int
fun breake(){
}
}
“`
・”abstract”を先頭に付ける(“open”は不要)
・コンストラクタを設定できる
・プロパティに値を

元記事を表示

[android] https://twitter.com/shareのendpointが利用できなくなった模様

# 結論
twiterのシェアには
`https://twitter.com/intent/tweet`
を使う

# 起きていること

twitterのシェアには
– https://twitter.com/share
– https://twitter.com/intent/tweet

などのendpointがありますが、`https://twitter.com/share`を用いている場合、androidでtwitterア
プリがインストールされている環境だとツイートができなくなった模様です。
(2023/1/16時点。確認したバージョンは9.71.0-release.0)
![IMG_20230116_131501.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324924/efe454b3-fa07-ba5d-d901-893292f09a92.jpeg)
何故か検索扱いになる

不具合として修正される可能性もありますが、ドキュメント的には`https://twitter.com/int

元記事を表示

Androidで実機をPCにミラーリングするのはAndroid Studioだけで簡単にできるよ

# 概要

Android Studio Electric Eelがリリースされました。
意外と気づいてないかもですが、このバージョンから、なんと実機をPC上でミラーリングできる機能が追加されました!!

特にリモートで開発している場合、周りに自分の実機画面を表示しながら説明したいことがあると思います。これが簡単にできるのです。

今までは、以下のようなサービスを使ってましたが、もう不要かもです。(個人的にはApowerMirrorにお布施してたのが残念ですが、最近安定してなかったのでよかった)

* ApowerMirror
* LetsView
* Vysor

# やり方

Preferencesを開いて、以下の画像のように 「Experimental」 の 「Device Mirroring」 を ONにします。

元記事を表示

SplashScreenについて(静止画編)

こんにちはandroidでアプリ開発を学習中のみのむしと申します。
今回は、SplashScreenを学びましたので、実装方法を忘備録として残したいと思います。

SplashScreenを表示させるActivityを作成する

今回は、新規作成したActivityにSplashScreenを表示させ、その後にMainActivityにIntentする流れで作成していきます。

drawableに新規xmlファイルを作成する

“`xml




元記事を表示

【Android】Guidelineとは【Kotlin】

# はじめに
今回はたまたまコードを眺めているうちに見つけたXML上のLayoutについて気になったので
記事にしようと思いました
発見した要因は、「~~Layout」や「~~View」といったものはよく目にしますが、全く違うものがあったので目に留まったといった感じでしたw

# Guideline
直訳すると そのまま「ガイドライン」ですね
いわゆる 補助線を追加できるといったものになります
このGuidelineは垂直または、水平のいずれかに設定できます

配置方法は3種類で
|説明|実際のコード|
|:—|:—|
|レイアウトの左辺or上辺からの固定距離の指定|layout_constraintGuide_begin|
|レイアウトの右辺or下辺からの固定距離の指定|layout_constraintGuide_end|
|レイアウトの幅または高さのパーセンテージを指定|layout_constraintGuide_percent|

  • OTHERカテゴリの最新記事