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

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

Android14の重要そうな差分まとめ

# はじめに
Android13が出てきたのがつい先日のように感じますが、もうAndroid14がでようとしていますね。
個人的にはAndroid13もそれなりに修正が必要な差分があり大変な印象がありましたが、14ではどうでしょうか?
先んじて重要そうな差分を備忘録的にまとめておこうと思います。

# 正確なアラームのスケジュール設定がデフォルトで拒否される

> Android 13 以降をターゲットとする新しくインストールされたアプリのほとんどで、SCHEDULE_EXACT_ALARM 権限が自動的に付与されなくなりました(権限はデフォルトで拒否されます)。

https://developer.android.com/about/versions/14/changes/schedule-exact-alarms?hl=ja

とのことです。
アラームって最近使うことないですが、使用されているプロジェクトで自動付与の恩恵を受けているプロジェクトは上記権限要確認ですね。
ただし、 OnAlarmListenerを使用して通知を受けている場合は上記権限は必須でないようです。

# フ

元記事を表示

JetpackComposeでFirebaseAuth

# JetpackComposeでFirebaseAuth
FirebaseAuthをJetpackComposeで実装したいと思います。
The Firebase Blogの「[Adding Firebase Authentication to a Jetpack Compose app](https://firebase.blog/posts/2022/05/adding-firebase-auth-to-jetpack-compose-app)」を参考にしたのですが…いかんせんわかりづらいですね…
もう少しかみ砕いた感じで実装していきます。

## FirebaseAuth(email, anonymous)のエンドポイント

| エンドポイント | |
|:–|:–|
| auth.signInAnonymously | 匿名ユーザの作成とログイン |
| auth.signInWithEmailAndPassword | メールアドレス認証ユーザのログイン |
| auth.createUserWithEmailAndPassword | メールアドレス認証ユー

元記事を表示

SkyWay Android SDK クイックスタートが残念な件

SkyWay Android SDKを使ってみました。

まずは[SkyWay Android SDK クイックスタート](https://skyway.ntt.com/ja/docs/user-guide/android-sdk/quickstart/)に従って、小さい実装を組みましたが、クイックスタートの内容が残念だったで記します。

まず
![スクリーンショット 2023-07-21 13.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103548/ecec0720-746e-3381-1f88-06da572a1f72.png)
とありますが、これは不要です。
使っているのはAndroid Studio Flamingoですが
“`
buildFeatures {
compose true
} 
“`
のままで良いです。
このオプションはJetpack Composeを使うかどうかのオプションですが、そもそもJetpack Compose と la

元記事を表示

Moshiを使ったJsonのコンバート

# はじめに
今回はGsonが非推奨なのでMoshiを使ってのJson変換を紹介していきます
### 本文
コード自体は下記の通りです
“`kotlin
Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
.adapter(HogeData::class.java)
.fromJson(Json)
“`
`adapter`の中には変換先のデータクラスを渡し、`fromJson`には変換したい`Json`を渡します。
ここで***2点***注意が必要なのですが、
***1つ目***が`.add(KotlinJsonAdapterFactory())`Kotlin用のFactoryを追加することです
***2つ目***は変換先のデータクラスで下記二つのアノテーションをつけることです。
データクラス自体には`@JsonClass(generateAdapter = true)`
各種変数には`@Json(name = “hoge”)`
### 最後に
今回はだんだんと増えてくるであろうMoshiの実装方法を紹介していきました

元記事を表示

アシスタントアプリとして起動できるAndroidアプリの作成

# はじめに
この記事ではAndroidアプリをアシスタントアプリとして登録したい時に設定するコードについて紹介します。

例としてコードを掲載していますが、まだ開発途中であるため、一部機能が使用できず、また強制停止が頻発します。あくまで参考程度でお使いください。

# Androidスマホのショートカット機能
Androidスマホには、画面の右下から中央下に指をスライドしたり、ホームボタンを長押しするとアシスタントアプリが起動するショートカットが実装されています。また、端末によっては、アシスタントキー(SHARP AQUOS)や、Googleアシスタントボタン(SONY Xperia)などの、アシスタントアプリを起動するためのボタンが存在します。

しかし、あまり使わないんですよね。この機能。
じゃあ別のアプリを割り当てたい。

でも残念なことに、これらのショートカットは、アシスタントアプリとして登録されているアプリでないと、起動させられないんです。
RecyclerViewで何も表示されない時に確認すべきこと。

何度もハマるので自分の備忘のために記入。

RecyclerViewに何も表示されない場合、以下の点を確認しましょう。

## RecyclerViewにlayoutManagerを設定する。

layoutManagerに何も設定しないと、何も表示されません。
view Bindingを使用している場合、以下のような感じで設定する。

“`XXXActivity.kt
binding.recyclerView.layoutManager = LinearLayoutManager(this)
“`

コードで設定する代わりにlayout editorで設定しても良い。

## (表示後にデータ更新している場合) nofityDataSetChanged() を呼ぶ

RecyclerViewAdapterが参照しているデータが変わった場合、表示を更新するためには

notifyDataSetChanged()

などを呼び出す必要がある。
(変更内容によっては行単位の更新を反映するメソッドのほうが適切な場合もあります。)

以上

元記事を表示

vol.2/2 APIのGET結果をキャッシュする (FlowChain,例外処理編)

# APIのGET結果をキャッシュしたい!
[前回](https://qiita.com/jozuko_dev/items/e1f47bd1a14a138fb51f)Roomの導入を行いました。
今回は、以下の処理をFlowのChainを使って記述していきます。
– 10分経過している時は、[サーバーから取得]->[DB保存]->[結果返却]
– 未経過の場合は、[DBから取得]->[結果返却]

## 各処理のFlow
サーバーからの取得と、DBへの保存、DBからの取得は、すべて異なるflowで記述しています。
“`kotlin
// サーバーからの取得
flow> {
val response = forecastApi.getArea()
if (response.isSuccessful) {
emit(Future.Success(value = response.body()!!))
} else {
throw HttpException(response)
}
}

元記事を表示

android java Bluetooth接続テスト用 コード

### ■ テスト概要
・Android 10の端末では、socketのconnectがちゃんと機能していたが、Android 11 の端末だと精度がかなり悪くなる。

#### 対象テストバージョン
(Bluetooth 2.0)(Bluetooth 3.0)

### ■ テスト用ソースコード

“`xml activity_main.xml

元記事を表示

【Flutter】screenutilに対応したGolden Testの実装

# はじめに
現在進めているプロジェクトでは画面サイズに合わせてWidgetやフォントサイズを調整できるよう
[flutter_screenutil](https://pub.dev/packages/flutter_screenutil)を導入しています。

Widget Test実装時はGolden Testで実装しているのですがその際に詰まったことを備忘録がてら書きます。

# 前提
[flutter_screenutil](https://pub.dev/packages/flutter_screenutil)とは?
Widgetやフォントサイズを動的に変更できる便利なパッケージです。
詳細な説明は省きますが公式を見て初期設定さえすれば簡単に実装することができます。

Golden Testについて
Golden Testの詳細は省きますが今回の対応では[goolden_toolkit](https://pub.dev/packages/golden_toolkit)を利用しています。
Flutterではパッケージを導入せずともGolden Testの実装は可能ですが、よりテス

元記事を表示

Unity 2021.3.xでAndroid33をビルドできるようにする

## 環境
– Unity 2021.3.9f1(Appleシリコン版)
– Android Studio 2022.2.1 Patch 2
– macOS Ventura 13.4.1(22F82)

## エラー

– Androidのリリースビルド(aab)を作成しようとすると、下記のエラーが発生する。
– エラーメッセージの通りで、android 33のSDKがないからインストールして、再起動してね、という内容。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37873/3129bab7-875f-4c30-9703-c0e7a43a4851.png)

“`
Target Android SDK not installed

Android SDK does not include your Target SDK of 33.
Please use the Android SDK Manager to install your target SDK version. Re

元記事を表示

vol.1/2 APIのGET結果をキャッシュする (Room+Hilt導入編)

# APIのGET結果をキャッシュしたい!
天気予報アプリも順調に育ってきました。
「画面を表示」 -> 「APIコール」 -> 「表示」はできましたので、APIコールの回数を減らすべく、10分以内のリクエストならDBを参照する様にしたいと思います。

ということで、キャッシュ先をRoomにすべく、導入していきます。

## Room

### 1. gradleの定義
まずは、Roomの依存定義を行います。

“`diff_gradle:app/build.gradle
plugins {
id ‘org.jetbrains.kotlin.android’
+ id ‘kotlin-kapt’
id ‘com.google.dagger.hilt.android’
}

android {
defaultConfig {
+ kapt {
+ arguments {
+ // ① schema定義を出力しておくと、AutoMigrationできるようになるので
+

元記事を表示

SkyWay×Androidでビデオ通話アプリを作成してみた

# はじめに
[Qiitaでイベント](https://qiita.com/official-events/93564ad363199fa7999c)をやっているので、参加するためにSkyWayを使ってみました?‍♂️
[前の記事](https://qiita.com/nakashimaakio/items/3fddc5b685f50dc48e63)ではJavaScriptで書きましたが、今回はAndroidアプリ化しました。
ドキュメントは[こちら](https://skyway.ntt.com/ja/docs/user-guide/android-sdk/quickstart/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_engineer_festa_2023)から。

https://skyway.ntt.com/ja/docs/user-guide/android-sdk/quickstart/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_en

元記事を表示

Android StudioでYour CPU dose not support VT-x.のエラーを解消する方法

Intel Macで動作していたAndroid StudioのシミュレーターがM1 Macに切り替えた後、Your CPU dose not support VT-x.というエラーが発生してシミュレーターを立ち上げられなくなった。
調べたところ解決できたのでまとめておこうと思います。

### 環境
・ Apple M1 Pro/mac OS Ventura
・ Android Studio Flamingo 2022.2.1

### 解決方法
Settings…>System Settings>AndroidSDKのSDK Toolsタブを開き、Android Emulatorのチェックボックスの中がーになっていたのでチェックマークを入れた

どうやらAndroid Emulatorが古くなっていたようだったのでチェックを入れて最新版のをインストールしたらシミュレーターで起動できるようになりました

元記事を表示

JetpackComposeでonTextLayoutを使わないAutoSizeTextを作る

# JetpackComposeでonTextLayoutを使わないAutoSizeTextを作る
JetpackComposeにautoSizeMaxTextSize,autoSizeMinTextSize,autoSizeStepGranularity,autoSizePresetSizesに対応したTextを作成します。

AutoSizeTextの全ソースは[こちら](https://github.com/jozuko/ComposeTutorial/blob/main/app/src/main/java/com/jozu/jetpack/compose/tutorial/screen/composable/AutoSizeText.kt)です。
ご自由にどうぞ。もっと効率のいいやり方あったら、コメント or プルリクいただけると泣いて喜びます。

:::note info
経緯
AutoSizeTextを作ってみたというサンプルに多いのが、「onTextLayout」を使用しているものです。
これは、「描画する」->「表示しきれなかったらフォントサイズを小さく

元記事を表示

ElixirDesktopでスマホアプリを作る – LiveViewを使用してCRUDの機能を実装する

こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop + Phoenix1.7のスマホアプリをWindows11 + WSL2で動かす手順をまとめたいと思います。

———————————————

なお、本記事は2023/7/13開催[ElixirMobile#3:DBも内蔵したElixirDesktopスマホアプリ開発ハンズオン](https://fukuokaex.connpass.com/event/283648/)のイベントレポート(後半)を兼ねています。

——ハンズオンの様子(後半)はこちらから——

↓27:03~以前が前回の記事、以降が本記事のハンズオン動画です

↓「微調整」の部分以降の動画です。

——————————-

元記事を表示

JetpackComposeでSpannableテキスト

# Spannable風のTextを作る

![text_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491965/ba2ba372-a14f-82ff-0983-48456b62c07a.png)

この画像の年月日の部分は、1つのTextに対して、複数のスタイルを適用する(Spannable風)ことで実現しています。
以下を参考にしています。

:::note info
[1つのテキストに複数のスタイルを設定する(Google Developers)](https://developer.android.com/jetpack/compose/text?hl=ja#multiple-styles)
:::

## 一部のフォントサイズを小さくする
“`kotlin
val smallSpanStyle = SpanStyle(fontSize = MaterialTheme.typography.bodySmall.fontSize)
Text(
text

元記事を表示

TextInputLayoutのスタイル設定

TextInputLayoutのスタイル設定についてまとめようとしましたが途中で力尽きました。
https://github.com/material-components/material-components-android/blob/master/docs/components/TextField.md を読めばやろうとしていたことがだいたいまとまっていました。
やる気が出たら追記します。

### TextInputLayoutを表示するためのレイアウト

|未入力|入力後|
|-|-|
|![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149856/49c276cd-1e04-14d9-209d-01a51d3634ef.png)|![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149856/80507389-7164-5861-8d59-8a262e1c9280.png)|

“`xml

元記事を表示

JetpackCompose+HorizontalPager+Indicator

# HorizontalPagerにIndicatorをつける

[前回](https://qiita.com/jozuko_dev/items/d025391e37351708a964)、HorizontalPagerを配置しました。これに、インジケーターをつけていきます。

完成イメージはこちらです。
![indicator_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491965/fc57bc90-8a89-9a91-8dc3-eb10335f736a.gif)

## データ構造
前回と同じですが、天気予報は、以下のデータ構造をしています。
“`text
Forecast(天気予報)
└ List(地域データ一覧)
├ name(地域名)
├ code(地域コード)
└ overviews(今日と明日とあれば明後日の天気予報)
├ weatherCode(天

元記事を表示

JetpackCompose + HorizontalPager

# Pagerを使って天気予報画像を表示しよう

 JetpackComposeのPagerを使って、天気予報の画像を表示しようと思います。

## 依存関係の修正
JetpackComposeのPagerは、[バージョン 1.4.0-alpha03](https://developer.android.com/jetpack/androidx/releases/compose-foundation?hl=ja#1.4.0-alpha03)で、[accompanist](https://google.github.io/accompanist/pager/)から本家(androidx.compose.foundation:foundationライブラリ)に統合されました。
なので、まずは、依存関係を更新していきます。

ただ、残念なことに、現時点ではJetpackComposeのBOMは、androidx.compose.foundation:foundationを1.3.1までしかサポートしていないので、BOMが使えないため手動で定義していきます。
[BOM とライブラリ バージョン

元記事を表示

【Android】緯度経度から2点の距離を出す【Kotlin】

# 実践
Location.distanceBetweenを利用して2点の距離は出します。

private fun getDistanceBetween(
latitude1: Double, longitude1: Double,
latitude2: Double, longitude2: Double
): Float {
val results = FloatArray(3)

Location.distanceBetween(latitude1, longitude1, latitude2, longitude2, results)

// 0を指定することで2点の距離を返す
return results[0]
}

Location.distanceBetweenの引数を上から順に 第一地点の緯度、経度、第二地点の緯度、経度、2点間の距離を詰めるresultsの順で指定します。

resultsではそれぞれ数字を指定して欲しい情報

元記事を表示

OTHERカテゴリの最新記事