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

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

Android Jetpack の Navigationを使ってみた

Androidで画面をたくさんある場合、その画面の数分layout.xmlとFragmentを作成することになるが、どのFragmentからどのFramgmentへ、何の条件のときに遷移するかを制御するのがコードでベタベタになってしまいます。

Android Jetpack の Navigationを使うとその辺がスッキリします。
# 参考URL
[本家Android developers](https://developer.android.com/guide/navigation?hl=ja)
[[Android] 10分で作る、Navigationによる画面遷移](https://qiita.com/tktktks10/items/7df56b4795d907a4cd31)
[Navigation Componentの使い方(概要〜画面遷移〜データの受け渡し編)](https://qiita.com/naoi/items/8384561d30111c8704b3)

簡単に手順だけ説明しますので詳細はgitHubに上がっているソースを見てください。
[gitHub](https

元記事を表示

リリース済みのAndroidアプリをリファクタリングしてみた

これまで、個人開発で製作してきたAndroidアプリ「[書籍管理ができる巻数メモ](https://play.google.com/store/apps/details?id=com.highcom.comicmemo)」は継続的に機能追加するアップデートは行ってきたものの、リファクタリングによって刷新するような事はしてきませんでした。
仕事でもAndroidアプリを開発するようになり、知識も少しずつ増えてきたので、思い切ってリファクタリングをしてみることにしました。

# なぜリファクタリング?
個人開発をしていると、ゼロから作ったり、どんどん機能を追加したりすることはよくありますが、既存機能をリファクタリングするというのは、やろう!って思わないとなかなかやらないと思います。
リファクタリングの難しいところは、

– 変更後も既存と同等の機能を実現する
– 変更前のデータも引き継ぐ
etc…

既にサービスを提供しているものをそのまま継続して利用できるようにしなければなりません。なので、リファクタリングをするということも新しい技術的な知識が習得できると思ったのが背景にあります。

元記事を表示

AndroidのDeepLinkを手軽にdebugする

**「DeepLink」**
モバイル開発においてよく使う機能であり、ユーザとしても便利なものであり、そしてdebugがやりづらい。という開発においては苦しいもの。というイメージが個人的にはありました。(本番環境や開発環境でURL違うなど準備もそこそこある)
それを解決する方法を本記事では紹介します。

# DeepLinkについてざっくりと

– iOSのユニバーサルリンクと似ている
– httpも使用可能
– カスタムURLスキームと似ているが微妙に異なる
– タップすると設定されたアプリが起動される
– 特定の画面を表示させることも可能

# 解決したいこと
– DeepLinkのためにサーバやドメインなどを準備したくない
– 手早く動作確認したい

# Android Studioでの設定
## AndroidManifestにfilterを設定

“`xml


元記事を表示

StreamFab6とAndroid版が登場!

Jetpack Compose1.2.0で追加されたmovableContentOfを使ってみた

今回は、Jetpack Compose1.2.0で追加された`movableContentOf`について解説していきたいと思います。

1.2.0で追加されたのですが、自分は完全に見落としていました。
1.3.0で追加された`LookaheadLayout`と合わせて使うと、
これまでComposeで実現しづらかった、Shared Element Transitionを実現できるみたいです。

本記事では、まず`movableContentOf`について見ていきたいと思います。

## movableContentOfとは何か

`movableContentOf`とは何かというと、公式サイトによれば

https://developer.android.com/jetpack/androidx/releases/compose-runtime?hl=ja#1.2.0
> コンポーザブル ラムダを別のラムダに変換します。変換されたラムダは、状態および対応するノードを呼び出された新しい場所に移動します。前の呼び出しがコンポジションから出ると状態は一時的に保持され、ラムダへの新しい呼び出し

元記事を表示

【Android】CoroutineのJobについて【Kotlin】

# はじめに
今回はCoroutineのJobという機能について調べたものを記事にします
箇条書きにしていてわかりにくいとは思いますが、使いながら理解を深めていこうと思っているのでご容赦ください

# まとめ内容
Jobのできることを箇条書きにしてまとめたものです
・親子階層で配置することができ、親が取り消されると 子のロジックも取り消される
・SupervisorJobを使用してカスタマイズできる機能で、CancellationException以外の例外で子が失敗するとその親がキャンセルされる(結果 全ての子がキャンセルされる)
・基本的にはJob を実行しても値を出すことはできない

・Jobの状態は New,Active,Completing,Cancelling(キャンセル中),Cancelled (キャンセル済み),Completed の6つの状態が存在する

・Jobはアクティブな状態で作成され開始されます。
・またstartまたはjoinを呼び出すことによってアクティブにすることもできます。
“`
job.start()
job.join()
“`
・コルーチンが動

元記事を表示

【Android】Unknown FragmentsでXMLプレビューが表示されない場合の対処法

# はじめに
Jetpack Compose登場してからじわじわと浸透が進んでいる現在ですが、まだXMLを使用した開発は現役ですよね。
そんな中XML上でfragmentコンポーネントを使用しているとエラーが発生し、プレビューが表示されない問題があります。
この問題の対処法を備忘録的にまとめておこうと思います。

# 対処法
まずエラー内容は以下になります。
![スクリーンショット 2022-11-20 17.03.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/9e214d08-f05d-1dd8-2581-6acf4874254c.png)

こちらのエラーは主にfragmentタグを使用している場合などが当てはまりますね。
メッセージにもヒントがあるのですが、原因としてはfragmentは実行時に挿入されるため、対象のコンポーネントをIDEが認識できないことです。

そのため、対応方法としては以下のようにtoolsを使用してエラーの対象であるコンポーネントに対してレイアウトを設定

元記事を表示

Androidテンプレートレポジトリ作ったので晒す

# はじめに
こんにちは!Androidエンジニア3年目のgotlinです。
今回はAndroidのテンプレートレポジトリを作ってみたので、晒してみます。
[チームで育てるAndroidアプリ設計](https://peaks.cc/books/architecture_with_team)を読んでからずっとAndroidのテンプレートレポジトリを作りたかったのですが、どの機能までをテンプレートにいれるか結構悩んだりしてて、最近まぁこのくらいでいいかっていうのが、見えてきたところです。

個人開発レベルのテンプレートリポジトリなので、そぎ落としている部分もあります。

作成したリポジトリは以下です。

https://github.com/goutarouh/BaseAndroidProject/tree/main

移植時の方法もREADMEにあるので良かったら使ってみてください!

# 設定したこと

## Gradle設定周り

### バージョンカタログ
設定は[こちら](https://github.com/goutarouh/BaseAndroidProject/blob

元記事を表示

AndroidとiOSでSuicaを読み取る

ICOCA やねんけどね

# 概要

– **今回の目的**
Android と iOS で Suica を読み取ります。
– **将来の目的**
Suica は NFC TypeF でマイナンバーカードは TypeB だそうです。役所系の案件を獲得できるかも知れません。

## 用語
– **NFC**
Near field communication の略で近距離無線通信と訳されています。主に非接触型カードに搭載され、近年のスマートフォンにも搭載されています。
– **Type**
運転免許証やマイナンバーカードなどに使用されています。
– **Type F (FeliCa)**
Suica PASMO Edy nanaco などに使用されています。
– **IDm**
カード固有の ID です。スマートフォンをピッって当てるだけで読み取れ

元記事を表示

HTTP URLをAndroidアプリで開くために調べたこと

Androidアプリでは特定のドメインやパスのリンクをアプリで開くことができ、それによりアプリにユーザを誘導することができます。

リンクを開く方法は以下の3種類があります。
1. Deep Links
1. Web Links
1. Android App Links

ただし、これはAndroidでアプリを持っているユーザ限定です。ダウンロードしていないユーザに対しては、通常のWebブラウザで表示されます。
そもそもダウンロードからさせたいなどの場合は、Firebase Dynamic Linksなどが役に立つかもしれません。

# Deep Links (iOSではCustom URL Scheme)
ユーザをアプリの特定の部分に遷移させる、**任意のスキームのURI**を指します。
AndroidManifest.xmlにインテントフィルターを追加し、URLとアプリを紐づけることができます。

“`xml

<

元記事を表示

【RecyclerView × ViewDataBinding】なるべく頭を使わずに最短で複数レイアウトを使う

https://github.com/yuskey38/example-multi-layout-recycler-adapter/tree/main/app/src/main/java/com/example/example_multi_layout_recycler_view

## やりたいこと
なるべく頭を使わずに最短でRecyclerViewで複数レイアウトを使う。
いつも忘れる + ググった時にやり方色々出てきてややこしいのでテンプレート作っておく。

## 実装方法の大枠
基本的に最後に添付したコードをまるっとコピペして少し修正すればOK。
データやレイアウトは自由に作って試してみてください。

① ViewTypeのEnumを作る
② `onCreateViewHolder`はコピペ
③ `onBindViewHolder`もほぼコピペ
④ `getItemViewType`もほぼコピペ
⑤ `getItemCount`もほぼコピペ
⑥ ViewHolderのメソッドでデータとレイアウトを紐づける

※ 上記の順番で実装していく場合は`ViewHolder`がないよとエ

元記事を表示

JetpackComposeのLazyColumnでClipToPaddingのような余白のあるリストを設定する方法

JetpackComposeでリストの表示などは簡単にできますが、今までのリストのように上に余白を作りたいと思いました。

簡単に設定ができました。

# 設定方法

“`list.kt
LazyColumn (contentPadding = PaddingValues)
(top = 16.dp)){
items(100) { index ->
Text(text = “Item: $index”)
}
}
“`

`PaddingValues`
こちらをLazyColumnに設定するとできます。
`PaddingValues`は`start` `top` `end` `bottom`
それぞれ設定ができます。

![Videotogif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/d2fba24b-1492-b327-7cd8-61e6737edd5b.gif)

以上です!

元記事を表示

AndroidのlibpdでJavaレイヤーで音声データを取り扱う

libpdのサンプルを見ると端末の音声入力・音声出力を使う例しかなく、実際に出力される音声のPCMデータにアクセスする方法がよくわかりませんでした。

調べてみたところ、`PdBase.startAudio()`ではなく`PdBase.process()`を使うことでlibpd組み込みの音声入出力ではない、任意の音声データを処理させることができそうだってことがわかったので、これを実装するのに必要な手順をメモがてらまとめてみました。

## .pdファイルを適当な場所に配置する

assets内などに保存された.pdファイルをストレージ上の適当な場所に保存します。
たとえば、`assets/my_patch.pd`に保存されている.pdファイルをアプリのプライベートなファイル領域に保存するなら以下のような感じで保存できます。

“`kotlin
private fun preparePatch(): File {
val patchName = “my_patch.pd”
val patchFile = File(context.filesDir, patchName)
i

元記事を表示

【Jetpack Compose】Image()コンポーザブルが使用できない

# どういうことか

Androidデベロッパーのチュートリアルをやっている。

https://developer.android.com/codelabs/basic-android-kotlin-compose-add-images?hl=ja#3

画像を表示するためにImageコンポーザブルを追加する、とある。

“`kotlin: MainActivity.kt
Image(
painter = image
)
“`

テキスト通りに進めているハズだがエラーが出て画像を表示できない。

`Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:`

## 原因と解決

適切な `import` を行うことで解決する。
**チュートリアルには載っていない!**

“`kotlin: MainActivity.kt
import androidx.compose.foundation.Image
“`

自動補完でや

元記事を表示

Android実機でError: Activity class {} does not existが出てデバッグできない

# 背景
Androidアプリを開発してる際に以下のエラーが出始めて、実機デバッグができなくなってしまいました
(ここではパッケージ名を`com.package.name`としています)。

“`bash
Starting: Intent { cmp=com.package.name/.MainActivity }

Error type 3
Error: Activity class { com.package.name/com.package.name.MainActivity } does not exist.
“`

# 関連情報
調べると同じようなエラーで苦しんでいる人が世界中にいそうです。

– https://stackoverflow.com/questions/63075068/error-type-3-error-activity-class-mainactivity-does-not-exist
– https://stackoverflow.com/questions/58795063/error-activity-class-mainactivity-do

元記事を表示

ファイル送信するまでは、アプリから出しませんよ。Android(java)

# 仕組み
Andoridアプリから、データをサーバー(Apache)へ送り、PHPが基幹システムへ送り出す処理を行ったら、Androidさんありがとう、お疲れ様です。

# 画像

# コード Main
“`java:MainActivity.java

/**
* ヘッダー ボタン 処理
*
* @param item
* @return
*/
@Override
public

元記事を表示

androidスマホでpython開発環境構築

# 今回はTermuxを利用してAndroidでPythonを活用する方法を紹介しよう。
# 1. Termuxのインストール方法
androidのPlayStoreからTermuxをインストールする。
– android
https://play.google.com/store/apps/details?id=com.termux&hl=ja&gl=US&pli=1

![andorid-termux.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981486/11a40a01-3485-8615-d49b-24bf7aa0425e.png)

# 2. Python開発環境構築

– Pythonをインストールしよう
Termuxのアプリを開いて、以下のコマンドを実行します。
`pkg install python`
![Screenshot_2022-11-16-23-21-13-83_84d3000e3f4017145260f7618db1d683.jpg](https://qi

元記事を表示

Jetpack Compose の Button に無意識で確保されるスペース

Jetpack Compose で `Button` 系のコンポーネントをレイアウトに詰めていると
指定してないのに謎のスペースが空いてなぜだろうとなりませんか (ならないか……)

たとえば こういうレイアウトをしてみます:

“`kotlin
Column {
Button(onClick = { /*TODO*/ }) {
Text(text = “Hello”)
}
Button(onClick = { /*TODO*/ }) {
Text(text = “World”)
}
}
“`

なんか微妙にスペースがあいてることに気づくかもしれません

![M3 Buttons](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/c1f96fd3-7a0d-1ffa-4a61-2918d5728621.png)

[Layout Inspector](https://developer.android.com/studio/debug

元記事を表示

Xperia端末、OpenSLでの録音音声異常問題

# はじめに
最近Xperiaの端末(1 IV等)音声に関する面白い問題を調査したため、その問題と解決方法を記載します。

# 問題概要
ウチのアプリ上Xperia1 IVを利用して配信したら、配信開始後20秒前後で、異常のダイアログが出て、配信終了になる。

# 解決
結論から言います。
OpenSLのEngine起動時、パラメータ“SL_ANDROID_RECORDING_PRESET_CAMCORDER“から“SL_ANDROID_RECORDING_PRESET_UNPROCESSED“へ変更すること。

# 調査経過
ダイアログからエンコード時、音声のタイムスタンプと画像のタイムスタンプが10何秒ずれることにたどり着いた。

そこから音声のエンコード時、異常端末は明らかに遅い。最初は音声エンコードのフォーマットを疑ったが、正常の端末と同様。

そうなると録音音声データの元、マイクからのデータを確認したところ、正常端末の音声データはちゃんと見えるが、異常端末の場合メモリー上0x0000のまま。

音声処理はNative層のOpenSLを利用しているのため、[Andr

元記事を表示

Javamailを学んだので応用してお問い合わせフォームっぽいのをつくってみた

こんにちはandroidでアプリ開発を学習中のみのむしと申します。
今回は、Javamailを勉強したため応用してお問い合わせフォームっぽいのを作ってみました。

仕組みとしては、送信元アドレスと送信先アドレスを設定し、
一度メールを送信したら以降はメールの本文の中に記載したユーザーのアドレス
と送信先アドレス間でやり取りを行うイメージです。

gmailの設定等

今回はSMTP通信を使って実装していきます。

また、以前までは、gmail内にある「セキュリティ > 安全性の低いアプリのアクセス」を有効にする設定を行うことでSMTP通信が可能でしたが、2022年5月30日より、ユーザー名とパスワードのみでGoogleアカウントにログインするサードパーティ製のアプリとデバイスについてサポートが終了してしまったため、こちらの方法が使えなくなってしまいました。

そのため、今回は以下のサイトを参考にしながらアプリパスワードを発行し、SMTP通信を許可していきます。
https://itblogdsi.blog.fc2.com/blog-entry-470.html

元記事を表示

OTHERカテゴリの最新記事