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

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

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|

よく分かってないKotlin Coroutine

## はじめに
Android開発でKotlin Coroutineを使用しているのですが、なんとなく使用していて「あ〜非同期処理を簡単に書けて便利だな〜」くらいの理解しかなかったため、今回はCoroutineの理解と備忘録として記事を作成したいと思います。

## Coroutineとは
Coroutineとは軽量のスレッドのようなもので、スレッドのように他の処理をブロックすることなく並列に行うことができます。
スレッドよりは軽量で10000個のCoroutineを同時に走らせることもできるみたい。

なにより一番の魅力は**非同期処理を同期的に書くことができます。**
また、非同期処理実行途中であっても **中断/再開** することが可能です。

## Coroutine登場とそれ以前
以下の典型的な非同期処理をCoroutineを使用しない/使用するパターンで比べてみる
1.サーバーから情報を取得する(ここではただの文字列)
2. 取得した情報をViewに反映する

### Coroutineを使用しない非同期処理
Coroutineが登場する前のAndroidアプリでの非同期処

元記事を表示

App Store / Google Play の フィーチャー枠獲得について

# はじめに
App Store / Google Playのアプリストアには、特定のアプリをピックアップして宣伝するフィーチャー枠というものがあります。フィーチャーされればアプリの知名度は飛躍的に向上し、ダウンロード数の増加にも直結します。
広告などによる地道な宣伝も、もちろん重要ですが、アプリのリリース後やアプリを盛り上げるイベントの際はフィーチャー枠を利用して集中的にアピールすることも大切です。

この記事では、アプリの注目度を高めるフィーチャーという制度の基本と、フィーチャーされるためのポイントであるAndroid バックキーについてまとめました。

### 参考になる本
– [スタートアップ・個人で作れる スマホ向けUnity ソーシャルゲーム開発ガイド](https://amzn.to/3QKy2rc)

## App Store / Google Play の フィーチャー枠とは
App Store / Google Playなどのアプリストアには、特定のアプリをピックアップして宣伝するフィーチャー枠というものがあります。フィーチャーされればアプリの知名度は飛躍的に向上し

元記事を表示

【Android】webviewにアプリで作ったヘッダーを入れ込みたい

# やりたいこと
こんな感じで、webviewとアプリ側のヘッダーを連結させる画面を作成しようとしていました。
今までLinearLayoutでヘッダーを上部に固定し、その下にwebviewを配置していたので、このような実装ができるか調べてみた次第です。
(紫の`Scrollable Header`がアプリ側で作成したヘッダー。その下のGoogleのページがwebview)
![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1274260/c47ebdc2-d21b-7f09-ba79-115a8d3e7e60.gif)

# 解決策
ScrollViewを使うことでめちゃくちゃ簡単に解決しました。

“`Sample.xml

元記事を表示

【GA4】Androidアプリ検証の準備(Windows 11)

Windows環境にてAndroidアプリのGA4計測を検証するための準備方法をスクリーンショット付きでご紹介します。

## 0. Androidアプリの準備
Androidアプリを用意して、Firebase SDKを導入&GA4アプリストリームと連携する。
詳しくは以下記事の
– Android プロジェクトに Firebase SDKを導入
– FirebaseプロジェクトをGoogleアナリティクスに接続

を参照。

https://qiita.com/aqril_1132/items/5997fc611ee227e7a567

## 1. Android Studioのインストール
公式ガイドの案内通りにWindowsにAndroid Studioをダウンロード&インストール。Android Studioをインストールしておくと細かいデバッグ時や検証用アプリを作成するときなど後々便利。インストールに結構な時間が掛かります。
https://developer.android.com/studio/install
## 2. PATHを通す
1. 自分のユーザー名のフォル

元記事を表示

[iOS][Android] NFCタグを使ってスマホアプリを起動する

# やりたいこと
NFCタグにスマホを近づけてアプリを起動する
対象は Android/iOS 両方。
実現するには、NFCタグへの情報書き込みとアプリの実装などが必要となります。

# 1. NFCタグへの書き込み
NFCタグへの書き込みは [NFC Tools](https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=ja) を利用しました。
登録したNDEFレコードは以下の2つです。
 1. Data (MIME)
 2. URL/URI

## 1.1 Data(MIME)レコード
Androidアプリを起動するための情報です。
| 項目 | 内容 |
|:-:|:-:|
| content-type | application/{ユニークなURI} |
| データ | 任意のテキスト |

ここではcontent-type は以下とします。
`application/vnd.dev.sunskysoft.myapp`
詳細は以下を参照。
https://developer.android.com/gu

元記事を表示

【Android】パスワードのリセットメールを送信して、ディープリンクを使ってアプリに戻る方法のまとめ

# はじめに

現在開発中のアプリでパスワードのリセット機能を作成する機会がありました。アプリ内で再認証を行いパスワードのリセットを行うこともできるのですが、今回はパスワードリセットメールの送信を行いパスワードのリセットを行うことに決めました。

その際にディープリンクの設定など初見では複雑にみえる処理などがあり、躓くポイントが何点かありました

今回は、NavigationコンポーネントとFirebaseを使用して、パスワードのリセットが完了した後にアプリの特定の画面を開く方法をわかりやすくまとめたいと思います。

# パスワードリセットメールを送信する

パスワードリセットメールを送信するには、`sendPasswordResetEmail()`を呼び出します。

公式ドキュメントでは、`addOnCompleteListener()`が使われていますが、`await()`を使うことでコールバック地獄を回避することができます。

※必ず`suspend`関数内で呼び出してください。

“`kotlin
val auth = Firebase.auth

suspend f

元記事を表示

[Android] M2 Mabcookで開発環境を作る

大変沼ったのでメモ
先に書いておくと先人様の記事を2023年1月になぞった時のメモになります。

# 環境

– M2 Macbook Air
– Ventura 13.1
– Intellij IDEA

# JDKのインストール
本項ではこちらを参考にします。
https://zenn.dev/sasakiki/articles/d331b611f29c68
“`
brew tap homebrew/cask-versions
brew install –cask temurin11
“`
私の環境ではv19と同居する状態になったので下記を追記してv11を利用するように
“`.zshrc
export JAVA_HOME=`/usr/libexec/java_home -v “11”`
PATH=$JAVA_HOME/bin:$PATH
“`

# SDK Managerのコマンドラインツールのインストール
本項ではこちらを参考にします。
https://qiita.com/kazokmr/items/22ab227643b472fc5016

下記のCommand li

元記事を表示

Android/iOSアプリの提出に必要なアプリ以外の準備

* Android/iOS 共通
プライバシーポリシーのサイト
以下で簡単に作成できるので、つくってGoogle Sitesかなにかで公開し、提出時にリンク先に設定する
https://app-privacy-policy-generator.firebaseapp.com/

* Android固有 (PlayStoreへの提出)
(1)スクリーンショット
JPEG、あるいは24 ビットのPNGであること
最小サイズ:320px ~ 最大サイズ:3840px
スクリーンショットの最大サイズは、最小サイズの2倍以上にできないという制約がある
(2)フィーチャーグラフィック
JPEG、またはアルファチャンネルなしの24ビットPNG形式
サイズは1024×500px
最大ファイルサイズ 1024 KB

* iOS固有 (App Connectへの提出)
(1)スクリーンショット … シミュレータを以下それぞれ起動してスクショ
iPhone 6.5インチ … iPhone 13 Pro Max ※必須
iPhone 5.5インチ … iPhone 8 Plus ※必須
iPad

元記事を表示

【Android】RoomのInstrumentTestでInstrumentation run failed due to ‘Process crashed.’

AndroidのRoomでInstrumentTestを行っていたところ、以下のエラーが出ました。
その時の解決のメモです。

“`
Instrumentation run failed due to ‘Process crashed.’
“`

悲しいことにエラー文がこれだけでした。

エラー文で検索したところ、以下のstackoverflowの質問を見つけました。

https://stackoverflow.com/questions/52605267/instrumentation-run-failed-due-to-process-crashed

いくつか回答があるので、一通り全部読みます。すると以下の回答を発見。
(ちなみにこの時点で、○○の依存を追加しよう!みたいな回答もありますが、エラー内容が分かっていないのに行うのは危険です。)

>In my case, the android test console only showed the error above without any details.
>But in the logcat, the full e

元記事を表示

AndroidでNavigationを使ったDeep Linkの実装Part4

# 初めに
今回は、Intentに格納したDeepLinkを利用して画面遷移する方法を紹介していきます
### 本文
残りの作業はとても単純で、`intent`から`get`した後に明示的にキャストすることで型を`String`にしてあげた後に`toUri()`をして`navController`に対象のDeepLinkを渡してあげるだけです
“`kotlin
val linkUrl = intent.extras?.get(PAYLOAD_NAME) as? String
val deepLink = linkUrl.toUri()
val navHostFragment = suppoirtFragmentManager.findFragmentById(R.id.navigation) as NavHostFragment
val navController = navHostFragment.navCotroller
navController.navigate(deepLink)
“`
### 最後に
今回は、Intentに格納したDeepLinkを利用して画面遷移する方

元記事を表示

【Android】テストを書くときに使う@get:RuleとかRuleChainってなんぞよ

# はじめに

Androidでインストゥルメント化単体テストを作成するとき、`@get:Rule`を使ってテストを書いたことはありませんか?

“`kotlin
@HiltAndroidTest
class AppTest {

private val hiltRule = HiltAndroidRule(this)
private val composeTestRule = createAndroidComposeRule()

@get:Rule
val rule: RuleChain = RuleChain
.outerRule(hiltRule)
.around(composeTestRule)

}
“`

この、`@get:Rule`や`RuleChain.outerRule().around()`がよくわからない状態で、今まではテストを書いてきました。

ということで今回は、`@get:Rule`とかの**Rule**ってなんぞやということをまとめていきたいと思

元記事を表示

新しくbuild.gradleで宣言するcompileSdkExtensionとは?SDK Extensionsとは?

基本的には以下のドキュメントどおりなんですが、ちょっとややこしい部分があってコード読んだりしたので紹介しておきます。

https://developer.android.com/guide/sdk-extensions

OSのバージョンによらずに、Androidのシステムをアップデートできるようにしていこうという取り組みのようで、そのアップデートした部分をアプリから使えるようにしたいということのようです。

例えば、ACTION_PICK_IMAGESはAndroid 13 (API level 33で追加されたものだが、Android 11以上でR Extensions Version 2のSDK extensionsが入っている端末でも使えます。

## 基本

例えばACTION_PICK_IMAGESを使いたければ、ACTION_PICK_IMAGESはR Extensions 2であるとドキュメントからわかります。

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

元記事を表示

【Android】Active Build Variantを切り替えたときにエラーが発生した時のまとめ

# エラーが発生した時の状況

ビルドバリアントが4つ設定されていた。

“`
– freeDebug
– paidDebug
– freeRelease
– paidRelease
“`

`freeRelease`を選択した状態で、**Run ‘ExampleScreenPreview’** を実行した。

次のウィンドウが表示された。

![名称未設定のデザイン (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/10cf5710-3a00-90d4-f977-14c801bb5716.png)

**Fix**をクリックした。

**Select Signing Config**ウィンドウで、**debug**を選択し、**OK**をクリックした。
そして、**Run**をクリックした。

![名称未設定のデザイン (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/

元記事を表示

[Android] CustomViewに独自の属性を作る

## はじめに

AndroidのCustomViewに専用の属性を用意しonDrawの中で使うよという話。

サクッと実装したい内容だけどいっつも忘れてるところからスタートするので記事にしました。
あとkotlinで書いてる記事も少ないように感じたので、何か誰かの役に立てれば…
(JetpackCompose時代に今更感はある)

## CustomViewクラスを作る

“`kotlin
class SampleCustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
/* これから実装 */
}
“`

これはテンプレなので特別書くことはありません。

## attrs.xmlを作る

独自に作りたい属性を定義します。

とりあえずStringを2つ作ることにします。

“`xml

元記事を表示

JetpackComposeでCanvasにImageを描写したときにBlendModeの挙動が想定外になる原因は、AndroidViewの時と同じ

ということを納得するために`JetpackCompose`の`Canvas`周りのコードリーディングをしました。
その備忘録です。

[この投稿を使用している、DroidKaigiの資料のリンク](https://speakerdeck.com/kkkkan/droidkaigi2022-jetpack-composewoyong-ite-canvaswozhi-jie-hong-ruyounakonponentowozuo-cheng-surufang-fa?slide=109)

# 背景 (長いので読まなくていいです。)
[2022/10にあったDroidKaigiで`JetpackCompose`の`Canvas`をテーマに登壇しました。](https://droidkaigi.jp/2022/timetable/363352)
その際に、「画像を描写した時のBlendModeの挙動が定義と異なっているように見える部分がある」、「何もかもが不明」、「何かご存知の方がいらっしゃったら教えて欲しい」としてあった部分がありました。
そこについて、解決法を教えてくださった方があり、なの

元記事を表示

OBD2から自動車のセンサーデータを抽出する

自動車関係のスマートフォンアプリを作っていて、スマホの各種センサーの精度を測ってみたいと思ったためです。手軽に車からデータを抜き出す手段として、OBD2端子にBluetooth端末を繋ぎ、スマートフォンとペアリングしてロギングすることにしました。
下記のQiitaが大変参考になりました。感謝を込めて。

https://qiita.com/naohikowatanabe/items/39f14aacb06d04253d17

# この記事でやること
– 自動車に接続するOBD2-Bluetooth端末の紹介
– OBD2-Bluetooth端末を自動車に接続する
– OBD2-Bluetooth端末をAndroidとペアリングする
– Androidアプリで自動車のセンサーデータを見る
– 自動車のセンサーデータをCSV出力する

# 手順
## 使ったOBD2-Bluetooth端末
↓こんな感じのものを使います。Amazonで「OBD2 Bluetooth」と検索すると出てきます。どれもこれも胡散臭いですが、私が使った2つ(2,000円、5,000円)はどちらも使用できました。

元記事を表示

Androidのパーミッションについて

# Androidのパーミッションとは?
Androidのパーミッション(権限)とは、端末の中の色々なデータに対してアクセスを保護してプライバシーを保護するたのものです。昨今、スマホは個人情報の塊のようなものです。
* アドレスブック(特に電話番号)
* SMSのメッセージ
* 何らかのログインID、パスワード
* 等など・・・

これらが自由に参照可能だと、勝手に情報が盗まれて見ず知らずのサイトに送られてしまいます。それらを制限するのがパーミッション(権限)です

## パーミッションの種類
パーミッションにどんなものがあるかですが、公式サイトではあまりきちんとまとまったのがないようです。唯一、APIリファレンスに説明があります。(結構、たくさんある)
[Manifest.permission](https://developer.android.com/reference/android/Manifest.permission)
ここにStringの定数として定義されています。例えば、ネットワークにアクセスするパーミッションであれば
“`
Constant Value: “and

元記事を表示

【Android】ビルドバリアントに合わせて同じコンポーザブルを作ったら、Conflicting overloads…というエラーが出たときのまとめ

# エラーが発生した時の状況

**build.gradle**にあたらしい**productType**と**productFlavors**を追加した。

“`gradle
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
signingConfig signingConfigs.debug
}
debug {
applicationIdSuffix “.debug”
debuggable true
}
}

flavorDimensions “plan”

productFlavors {
paid {
dimension “plan”
}
free {
dimension “plan”

元記事を表示

OTHERカテゴリの最新記事