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

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

Stable Diffusion APIを使って簡単に画像生成アプリを作ってみた

# はじめに
以前に比べると盛り上がりは感じないかもしれないが、それでもAndroidやiOSストアのランキング上位には画像生成AI系のアプリがいくつも並んでいて、生成系AIにも興味があったので同じようなものが作れないかなと思った。

しかし、全部自前で用意するとなると時間もお金もかかりそうなのでまずはAPIとしてそのまま利用できるサービスを探してお試ししてみることに。

# 利用したサービス

Stable Diffusion本家のStability AIでも利用できるAPIは用意されていたが
https://platform.stability.ai/

APIや料金体系がわかりやすそうだったりしたので今回はこちらのサービスを利用してみました。
https://stablediffusionapi.com/

![price.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245797/a80f644b-ab4c-e887-807a-18a8e26acea5.png)

APIを利用できるのはSta

元記事を表示

Android開発「startActivityとstartActivityForResultが共存してることってあるのか…」

## はじめに
Android開発でアプリケーションの異なる画面(アクティビティ)間での遷移は非常に一般的な操作です。
この記事では、開発時「えっ、なんでこのコード`startActivity()`と`startActivityForResult()`が両方あるの?」と思ったため、その違いについて調査しました。
(開発時に見ていたコードはJavaでしたが、今回はGoogle社がAndroidアプリの開発言語として公式認定したKotlinでサンプルコードを作成しています。)

## startActivity()
### 基本的な使い方
はじめに`startAcitivty()`についての説明も記載しておきます。
`startActivity()`これはアクティビティを単純に起動する基本的なメソッドです。
通常、このメソッドは`Intent`オブジェクトを引数として受け取ります。

“`kotlin
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
“`
このコードは、`Second

元記事を表示

androidのイベント通知

Androidアプリケーションにおけるイベント通知の方法は、アプリケーションのアーキテクチャや要件に合わせて選択する必要があります。この記事では、主要なイベント通知方法であるLiveData、StateFlow、EventBus、BehaviorProcessorを比較し、それぞれの特徴や使用ケースについて説明します。

# LiveData
LiveDataはAndroid Architecture Componentsの一部であり、データの変更を監視し、UIコンポーネントに通知するために使用されます。以下はLiveDataの特徴です。

### 特徴:

ライフサイクル感知型:LiveDataはライフサイクルオーナー(通常はActivityやFragment)にバインドされ、ライフサイクルに合わせてデータの更新と通知を行います。
データ変更通知:データが変更された場合、自動的にUIに通知され、UIの更新が行われます。
非同期サポート:非同期操作を行うためにCoroutineやRxJavaと組み合わせて使用できます。
### 使用ケース:

UIコンポーネント(例:TextView、

元記事を表示

Jetpack ComposeでLottieのanimationを無限にする方法

### 今のやりかた
“`Kotlin
LottieAnimation(
composition,
iterations = LottieConstants.IterateForever,
)
“`

### 昔のやりかた
“`Kotlin
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.search_animation))
val progress by animateLottieCompositionAsState(composition = composition, iterations = LottieConstants.IterateForever)
LottieAnimation(
composition = composition,
progress = { progress },
)
“`

### 参考
https://stackoverflow.com/a/73371580

元記事を表示

AndroidStudioで実行ボタンが押せない時の対処とそのしくみ

### 概要

Qiitaのキャンペーンをきっかけに
AndroidStudioとKotlinで学生時代ぶりにスマホアプリを作っています。
その時に出たエラーとその解決策をまとめました。

### 出たエラー

エラーというより、AndroidStudioの実行ボタン(▲のボタン)がグレーアウトして押せなかった。

### 解決方法

AndroidStudioのメニューの「File」→「Sync Project with Gradle Files」をクリックし、処理が終わると押せるように。

### 解決した理由

AndroidStudioのビルドは、Gradleで行われている。
プロジェクトとGradleを同期しないとプログラミングが実行できないことがある。

元記事を表示

visibilityよりもisVisibleを積極的に使った方がいい理由

# こいつらは一体何
`visibility`も`isVisible`もAndroidにおいて**Viewの表示・非表示を制御するプロパティ**です。

たとえばidが`hoge_button`というボタン要素があったとしてこれを**表示状態**にしたい時、次のように書けます。

“`kotlin
binding.hogeButton.visibility = View.VISIBLE
“`

しかし、以下のようにも書けます。 :eyes:

“`kotlin
binding.hogeButton.isVisible = true
“`

**「え、じゃあどっちのほうがいいの?!」**

ってなりませんか。(私はなりました。)

# 結論
**`isVisible`を積極的に使おう!** です

## Booleanなので関係のない値が入ってしまう可能性が低い

たとえば`visibility`を使う場合、値はIntが入ります。

“`kotlin
binding.hogeButton.visibility = View.VISIBLE
“`

この`View.VISIBL

元記事を表示

Androidアプリ内で画像保存を行う方法(MediaStore)

## はじめに
この記事では、アンドロイドアプリ内で画像保存をするためのストレージの権限の確認を行い、MediaStoreを使って画像保存機能を実装する方法について説明します。
使用した言語はKotlinです。開発環境はWindows10,仕様したアプリケーションはAndroid Studio Flamingoです。

## 手順
### 1.外部ストレージの書き込み権限の確認
Androidでのメディアファイルは、通常「共有ストレージ」と呼ばれる場所に保存されます。共有ストレージに保存されているデータはアプリ間で共有できます。しかし、共有ストレージに保存されたデータはセキュリティ上の懸念があるため、アクセスには制限が設けられています。

共有ストレージに保存されているデータは、AndroidのMediaStore APIによってデータベースとして管理されています。MediaStore APIを使用することで、アプリは共有ストレージ上のメディアファイルにアクセスできます。ただし、このアクセスにはユーザーの許可が必要です。これは、悪意を持つアプリが端末内のメディアファイルに不正にアクセ

元記事を表示

Jetpack Navigation で Material 3 に沿った画面遷移アニメーションを設定する

# はじめに

Android アプリにおける画面遷移は主に

– [Activity による画面遷移](https://developer.android.com/training/basics/firstapp/starting-activity?hl=ja#BuildIntent)
– [Jetpack Navigation](https://developer.android.com/guide/navigation) を用いた Fragment による画面遷移
– [Compose を使用したナビゲーション](https://developer.android.com/jetpack/compose/navigation)

がありますが、この記事では Jetpack Navigation による画面遷移のアニメーションについて述べます。Jetpack Naviation は Compose 登場前から開発しているアプリでは、現在でも使われているケースが多いと思います。

## Jetpack Navigation による画面遷移は設定しなければアニメーションなし

[Jet

元記事を表示

DroidKaigi 2023で驚いたところメモ

Androidの技術が好きなので、技術よりというかのやつばっかり聞きました。太字で個人的に驚いたところを書いています。何か間違えや聞き間違いなどがあれば教えてください。

# Modifier.Node を使いましょう

これを見なければということで来ました。

https://github.com/DroidKaigi/conference-app-2023/pull/996

Composable関数は返り値があるとスキップされない(これは知っていた)

* Modifier.composed{}
**composed{}はModifireの返り値があるので、スキップされない。**
**状態を保持するために結構Compositionツリーが大きくなる。**

* Modifier.Nodeはチェーンが2つ。
**Elementは毎回Compositionごとに比較用に使われる。**
Nodeはレイアウ

元記事を表示

【Android】プロファイル可能なアプリにするための設定方法

# はじめに
日常的に自身が作成しているアプリのパフォーマンスが適正な状態かどうか確認する必要があるかと思います。
その確認方法の一つとして、Androdi Qからアプリをプロファイル可能にするために設定が提供されています。
今回は上記に関しての設定方法を備忘録的にまとめておこうと思います。

# 設定方法
設定方法は非常に簡単です。
以下をManifestのApplication直下に記載するだけでプロファイル可能なアプリとなります。

“`
“`

以上です、注意点としては当然ではありますが、プロファイル可能になるということは色々見えてしまうことになるので、本番環境で設定はしないよう気をつけましょう。

# さいごに
Droid会議お疲れ様でした!
今回も非常に刺激的な登壇ばかりでした、忘れないためにも暫くはDroid会議の内容を記事にまとめるようにしたいと思います。

元記事を表示

【Android】Mathクラスについてpart2【Kotlin】

# はじめに
前回に引き続き、Mathクラス内で使えそうなものを記事に残します!
前回よりは使わなそうだけど、もしかしたら使うなって感じ(自分基準)

https://qiita.com/Tsubasa12/items/709cbd01b1abbfe8e209

# max()
“`
max(10,-8) // 10
“`
2つの数字の最大値

# min()
“`
min(10,-8) // -8
“`
2つの数字の最小値

# pow()
“`
5.pow(3) // 125
“`

累乗
# PI
“`
PI // 3.141592653589793
“`
円周率

# random()
“`
random() // 0.6071951836875007
“`
0以上1未満の double 型の値をランダムに生成する

“`
val range = (10..20)
range.random() // 13
“`
範囲を指定することで、その範囲内でランダムに値を生成する

# 参考

https://www.choge-blog.

元記事を表示

【Android】ZxingとML Kit を検証してみた

# はじめに
こんにちは。
今回はQrコード読み取りでライブラリの比較(個人的主観)をしたのでそのことについてです。
実装の解説などはないので興味がなければ、ブラウザバックでお願いします!
まず、Android開発で考えなければならないのがライブラリ選定です。それはQRコードを読み取りに関わらずです。セキュリティ、性能面、サポート期限などなど。。。色々あると思います。
今回注目したのが性能面です。実際に実装を行い、動かしてみてもし新しく導入するなら自分なら。。と言うことを記事にしてみました。
# 注意事項
注意事項です。
比較は今回実装したもので判定しています。
なので、実装方法を変えることにより性能が上がることも十分あります。また先ほどもお伝えしましたが、完全に個人的な意見になりますので 、間違っている可能性もあります。確認したOSはAndroid11です。また、どちらのライブラリも素晴らしかったと言うことはお知らせしておきます。
# 比較結果
比較することは以下になります。
* 読み取り
* 読み取りの距離
* 距離が近い場合しっかり読み取れているか
*

元記事を表示

Androidアプリ「はやメモ」をリリースしました【個人開発】

## はじめに

個人開発したAndroidアプリ「はやメモ」をリリースしました!

Androidアプリのリリースは今回で2回目です!

この記事では、アプリの紹介やアプリを開発している中で感じたこと、今後の課題だと思うことをまとめていきます。

## 目次
1. リリースしたアプリ「はやメモ」について
2. 制作した経緯
3. 使用した言語・データベース
4. 制作していて感じたこと
5. 今後の課題
6. おわりに

## リリースしたアプリ「はやメモ」について
#### リリースしたアプリ

* はやメモ:シンプルなメモ帳、ノート、メモアプリ

#### アプリの概要

シンプルなメモ帳アプリです。アプリを起動してすぐに新規メモが開くので、ささっとメモしたいときに便利です。すぐにメモしてすぐに保存できるように保存ボタンを画面右上に配置するなど、使いやすさも考えて制作しました。

PLATEAU 2023 ハッカソン by 日本Androidの会 に参加

# はじめに

日本Androidの会 浜松支部と香川支部の共同開催の[PLATEAUのハッカソン](https://japan-android-group.connpass.com/event/293648/)
香川は[デジタルハリウッド高松STUDIO](https://www.cast.ne.jp/lp/)、浜松は[SOU](https://sou-hamamatsu.jp/)で行われました。
PLATEAUの詳細は[公式サイト](https://www.mlit.go.jp/plateau/)を見てもらうのがわかりやすいです。
公式サイトの言葉を借りると「国土交通省が主導する、日本全国の3D都市モデルの整備・活用・オープンデータ化プロジェクト」になります。
PLATEAUで提供されるデータはUnityやThree.jp、AR.jsなどで扱うことが可能です。

# ツールとか

## PLATEAU VIEW
PLATEAUのデータをWebで確認できる

https://plateauview.mlit.go.jp/

## PLATEAU GitHub

UnityやUNREA

元記事を表示

Jetpack composeでBasicTextFieldを使う時に気をつけること

# はじめに
今回は`Jetpack compose`で`BasicTextField`を使っていて自分がハマってしまった問題を紹介していこうと思います
### 本文
まず、今回自分がハマってしまった問題というのは`BasicTextField`を使っているときに入力した後に入力内容をBSで削除していき再度入力した際に下記のエラーによりクラッシュしてしまうというものでした。
“`
java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
“`
原因の部分は下記になります
“`kotlin
decorationBox = { innerTextField ->
if (text.isEmpty()) {
Text(text = placeholderText, color = ChocozapTheme.colors.gray500)
} else {

元記事を表示

AndroidのJUnitテストは超ムズい(4)

# AndroidのInstrumentTestがmockkのバージョンによっては動かない。

“`kotlin:build.gradle.kts
・・・
dependencies {
・・・
androidTestImplementation(“io.mockk:mockk-android:x.xx.x”)
androidTestImplementation(“io.mockk:mockk-agent:x.xx.x”)
“`
mockk-android
mockk-agent
のバージョンですが、今のところ
* 1.13.3 → OK
* 1.13.4 → NG
* 1.13.5 → NG
* 1.13.6 → NG
* 1.13.7 → NG

となります。
“`
java.lang.IncompatibleClassChangeError: Superclass kotlinx.coroutines.flow.StateFlow of kotlinx.coroutines.flow.StateFlow_1_Proxy is an interface (d

元記事を表示

AndroidでRtrofitの接続先をSharedPreferencesに持つ場合

# Retrofitの接続先をSharedPreferenceに持つ場合

AndroidでHTTPで通信する場合、Retrofitを使う機会が多いと思います。
Retrofitの接続先のbaseUrlをSharedPreferenceに持つ場合があるともいます。
Androidアプリの中で設定画面を作って、SharedPreferenceのbaseUrlを更新しても、Retrofitの接続先には反映されません。
アプリを一度終了して、再度起動すると反映されます。

“`kotlin
class NetworkRepository(baseUrl: String, connTimeout: Long, readTimeout: Long) {

private var service: NetworkService
/**
* 初期化
*/
init {
logging.setLevel(HttpLoggingInterceptor.Level.BASIC)
val client = OkHttpClient

元記事を表示

DroidKaigi 2023 セッション資料&関連情報まとめ

[DroidKaigi 2023](https://2023.droidkaigi.jp/) の各セッションの登壇資料と動画、関連情報を随時まとめていきます。

[Twitter](https://twitter.com/search?q=%23DroidKaigi) や [YouTube](https://www.youtube.com/c/DroidKaigi/videos) の情報をもとに更新していきますが、抜け漏れ誤りなどありましたらコメントなどでお伝えください。

昨年の資料と関連情報はこちら。

https://qiita.com/hiraike32/items/5fbbfa9d023476194a7c

# Day1


## 11:20~ Gradle Convention Plugins

## 11:20~ Modifier.Node

元記事を表示

【Android Java】リスナーを脳みそに叩き込む

## リスナーを毎回ググってた
私は、リスナーを実装するときに毎回ググっていたのですが、
リスナーくらいは空で書けるようになりたいな、と思って実装手順を叩き込みたいと思いました。

初学者にとって最初につまずくポイントなんじゃないでしょうか。
リスナーの説明で、よく、`onclickListener`を例に説明がされますが、既存のlistenerを例に出されてもよくわかんないなと、思ってたので、今回は、自分で作るカスタムリスナーを例に説明していきます。

## この流れさえ覚えちゃえばOK!リスナー実装手順を覚える
1 インターフェースを作成する

2 リスナーを実装する

3 リスナーオブジェクトを作成し、リスナーと関連付ける

4 イベントが発生した際の処理を記述する

## リスナー実装の手順を箇条書きで詳細に
1 インターフェースを作成する
– リスナーのインターフェースを作成する
– このインターフェースには、リスナーが実装するメソッドが含まれる (今回は`onCustomEvent()`というメソッドを作ることにした)
“`java
// MyCustomListener

元記事を表示

FlutterでHTTP通信をしてみた件

# はじめに
Flutterで簡単なHTTP通信を実装してたいと思い。作ってみました。
GETとPOSTしかしていません。

# 動作環境
この記事の動作環境は以下のとおりです。

Flutter:3.7.1
Dart SDK:2.19.1
IntelliJ IDEA:2022.2.2

# 完成イメージ
今回の完成イメージは下図のようになります。

# サンプルコード
サンプルコードは[GitHub](https://github.com/ktaro-nakaya/bmi_sample)を確認してください。

# サーバサイド
このサンプルのサーバサイドはjson-serverを利用しています。
json-serverの使い方は[公式サイト](https://www.npmjs.com/package/json-serve

元記事を表示

OTHERカテゴリの最新記事