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

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

AndroidでバックグラウンドでAWS IoTメッセージを待ち受ける

以前の投稿で、Androidにおいて、UDPメッセージを待ち受けるバックグラウンドサービスを作成しました。([AndroidでバックグラウンドでUDP受信を待ち受ける](https://qiita.com/poruruba/items/01731d425b6e658fc56f))
今回は、AWS IoTすなわちMQTTのメッセージを待ち受けるバックグラウンドサービスを作成します。
それだけだと面白くないので、独立でサービスを起動し、AIDLを使って別のAndroidアプリケーションからサービスを操作し、メッセージを送受信できるようにします。
以下に構成をまとめます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/60de546a-7aa6-47d7-02a9-e8d0128223e1.png)

バックグラウンドサービスを独立に立ち上げるので、同じAndroid内の複数のアプリケーションで共用できます。
また、AWS IoT CoreをMQTTブローカとして使うので、他の

元記事を表示

Android Studioで出力されるAPKに任意の名前をつける

Android Studioのビルド時に”app-release.apk”から毎回リネームするのが面倒なので、デフォルトで名前をつけたい。
ここでは、リリース時は”MyAndroidApp-v1.x.x-20230204-131212.apk”という名前をつけるようにする。デバッグ時はもとの”app-debug.apk”にする(なにもしない)。

### 開発環境
Android Studio Dolphin | 2021.3.1 Patch 1
Gradle version 7.3.3

### 変更箇所

“`gradle:(project)/app/build.gradle

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
// ここから追加

元記事を表示

アリババ クラウド: 企業は 2023 年に AI とブロックチェーンにクラウドを活用する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121454/c2029d74-9285-d8ca-8c8b-f85fc5cc7088.png)

アリババ クラウドは、特に 2023 年の顧客のデジタル化をサポートするために、国内のさまざまなセクターでデジタル変革をサポートするというコミットメントを繰り返しました。

eunoiamedia の情報源によると、Alibaba Cloud Intelligence Indonesia のカントリー マネージャーである Leon Chen 氏も、インドネシアのすべてのビジネス セクターに対するこのコミットメントを強調しました。 2016 年からインドネシア市場にサービスを提供しており、インドネシアで 6 年間、アリババ クラウド パートナーのデジタル エコシステムを開発するためにより多くのリソースを投資することを約束してきました。

また、Alibaba Cl

元記事を表示

DroidKaigi2022のRobotTestRuleを紐解いてみた

# はじめに

Androidでのインテグレーションテストを行う際に役立つテストルールを作成したくて、DroidKaigi2022のリポジトリにある`RobotTestRule`を眺めていました。

“`kotlin
class RobotTestRule(
private val testInstance: Any
) : TestRule {

val composeTestRule = createAndroidComposeRule()
override fun apply(base: Statement?, description: Description?): Statement {
return RuleChain
.outerRule(HiltAndroidAutoInjectRule(testInstance))
.around(composeTestRule)
.apply(base, description)

元記事を表示

ContentProviderを使って別のアプリ間でデータをやりとりする

データを提供する側のアプリ: ContentProviderを実装
データを読み取る側のアプリ: ContentResolverのAPIを呼び出す

## データを提供する側

“`xml


【Flutter】AndroidでiOS風の画面遷移とスワイプによるバックを実現する

# はじめに
Flutterはクロスプラットフォームなフレームワークですが、Flutterでモバイルアプリを開発していて、Android・iOSという二つのOSで画面遷移時の処理を統一するのに少し工夫が必要だったため共有します。
本記事ではAndroidにおいてiOS風の画面がスライドするようなトランジションエフェクトと、スワイプによる画面バック処理の実装について紹介します。
Androidバックキー押下時に何か処理を実装していた場合、そのままではスワイプによる画面バック動作が無効になってしまうので、その解決を試みました。

# 目標
AndroidでiOS風のトランジションと「スワイプで前の画面に戻る」動作を共通で実装させる。

# 実装

実装の内容は大まかに以下となります。

1\. AndroidでiOS風の画面遷移をさせる
2\. バックキーに処理を設定する
3\. バックキー押下時の処理とスワイプによるバック動作を併存させる

## 1\.AndroidでiOS風の画面遷移をさせる

Flutterのコードを読むと、以下のようにOSによって異なる画面遷

元記事を表示

Dagger Hiltで使えるアノテーションメモ

# 初めに
今回は個人的に覚えておいた方がいいDagger Hiltのアノテーションを紹介していこうと思います
### 本文
Binds

@Bindsはインターフェイスのインスタンスを提供するときにどのImplを使用するかを知らせる

Provides

@Providesはメソッド内でインスタンスを生成して注入

Qualifierch

@Qualifierh同じ型に複数種類のバインディングを提供するためのもの(枝分かれみたいに使える)

Named

@Namedは名前をつけるため
### 最後に
今回は備忘録程度に自分がHiltのアノテーションで勉強したことをまとめてみました
誰かのお役に立てれば幸いです

元記事を表示

【Expo】ImagePickerで画像を複数枚選択する方法

# はじめに
個人開発中にImagePickerを「Expo ImagePicker 複数枚選択」とググっても「ImagePickerでは複数枚選択できない」とか「MediaLibraryでできる」という記事しかでてこないので記事を書くことにしました。

記事の最後にExpoで個人開発したアプリを紹介しているのでもしよければダウンロードお願いいたします!!?

# 前提
* SDK45以上
* expo-image-pickerインストール済み

# 結論
下記のようにするだけでした。
“`react
import * as ImagePicker from “expo-image-picker”;
~~
~~
const result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
allowsMultipleSelection: true, // これをtrueに設定する
quality: 1,
});
“`
これだけでした。

元記事を表示

targetSdkVersion 33 対応でやったこと

# 概要

[Android Studio を Electric Eel にアップデートしたときにやったこと – Qiita](https://qiita.com/koichi-ozaki/items/79d5cba03eaa3eb14f85)

こちらの対応を行うときに `targetSdkVersion 33` へ上げたので対応した内容を記載する。

# やったこと

– compileSdkVersion 更新

“`diff_gradle:app/build.gradle
– compileSdkVersion 31
+ compileSdkVersion 33
“`

– targetSdkVersion 更新

“`diff_gradle:app/build.gradle
– targetSdkVersion 31
+ targetSdkVersion 33
“`

– plugin の書き方変更(変更する必要なかったかも)

“`diff_gradle:app/build.gradle
-apply plugin: ‘co

元記事を表示

ARサンプルアプリ

https://github.com/iwata-koji/AR_Sample

元記事を表示

AndroidのOutOfMemoryErrorと出会ったときに試したこと

メモです

Android7.X系の高齢者向けスマホで ``で生成したAnimatableなDrawableResourceをImageViewに設定しようとしたときに出会いました。
setImageResource()が極端に重くなります。
特定の画像だけが極端に重い(といっても通常の端末なら耐えうる)といったケースでした。
`android:largeHeap=”true”` は元々指定されていました。

# 試したこと1 画像を解放して続行

catchして握り潰す
OutOfMemoryErrorはExceptionを継承したクラスではないのでExceptionでまとめてcatchしようとしてもできない

“`kotlin
try {
imageView.setImageResource(animatable)
} catch(e: OutOfMemoryError) {
imageView.setImageDrawable(null)
return
}
“`
重い画像を解放してやって続行。アニメーションは表示させない

元記事を表示

【Flutter】AndroidのAPKビルドがgradleやAndroid 12のエラーがでて出来ない問題の解決策

Android StadioでFlutterのAndroidアプリビルドがうまくいかなかった問題を有志の記事などを参考にしたところ解決することが出来ましたので、やり方を紹介したいと思います。

### エラー1
What went wrong:
Execution failed for task ‘:app:lintVitalRelease’.
> Could not resolve all artifacts for configuration ‘:flutter_local_notifications:debugUnitTestRuntimeClasspath’.
> Failed to transform bcprov-jdk15on-1.68.jar (org.bouncycastle:bcprov-jdk15on:1.68) to match attributes {artifactType=processed-jar, org.gradle.category=library, org.gradle.libraryelements=ja

元記事を表示

寝坊で信頼を失う前に……400円で買える保険

# はじめに
:::note warn
この記事は寝坊を防ぐ対策について言及するものではありません。
:::

寝坊をする理由は様々で、目覚ましのかけ忘れ・夜更かし・不眠・体調不良・二度寝・飲酒等等……
生活習慣の改善で解消できるものもありますが、どうしても意識がない睡眠状態では
100%しないと言い切れるものでもありません。

そのくせ社会人としての評価に寝坊は大打撃を与えます。
※自分が所属しているSES会社では客先評価と勤怠の比重が50:50程です。

体調不良で遅刻するという連絡さえできればそこまで大きなマイナス評価にはならないのですが、
寝坊のどうしようもなさは、連絡ができないところにあります。

そこで、設定した時刻までにスマートフォンを操作しなかった場合に、勤怠メールを送信する仕組みを考えました。
以下はAndroidアプリとなるため、ご了承ください。

**用意するもの**
・[Tasker](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&hl=ja&gl=US)

元記事を表示

DroidKaigi 2022のsettings.gradle.ktsを読んでみて、わからなかったことのメモ

# はじめに

DroidKaigi 2022のリポジトリの**settings.gradle.kts**を読んでいました。

https://github.com/DroidKaigi/conference-app-2022/blob/main/settings.gradle.kts

普段シングルプロジェクトで開発を行なっている場合には出会わないようなブロックやメソッドが散りばめられていて、gradle初心者にはかなりの圧迫感がありました。

そこで、自分のメモとして**settings.gradle.kts**に登場する各ブロックやメソッドの意味などをまとめてみました。

参考程度にお読みいただけたら幸いです。

# build.gradleとは

**build.gradle**にはビルドの内容がGroovy言語によって記述されています。
ビルドの内容とは、依存関係や依存関係の解決に使われるMavenなどのリポジトリのことを指します。

# settings.gradleとは

**settings.gradle**は、Gradleによって自動的に生成されるファイルです。
この

元記事を表示

Flutter M1 Mac环境配置

# はじめに

– Flutter 公式からも環境設定の説明を用意していますが、実際に着手してみると、初めてなので色々トラブルが発生しました。
– 本記事では 、私が踏んだ落穴を経験として、M1 Macbook をターゲットに導入中の注意点と導入順番を改善しました。
– M1 Macbook であれば、公式より本記事の方が詳しくてわかりやすいと思っています。

# Rosetta 2(SUDO命令)

– Apple Silicon Mac に Flutter を 導入する場合 Rosetta(ロゼッタ)が必要です。
ターミナルを開き、下記のコマンドで Rosetta 2 を導入します。

> Rosetta(ロゼッタ)とは ?
>
> Rosetta(ロゼッタ)は、特定のアーキテクチャのプログラムコードを持つバイナリを、別のアーキテクチャに適宜変換 (en:Dynamic recompilation) することでバイナリの互換性を維持する Apple の技術。

“`
sudo softwareupdate –install-rosetta –agree-to-licens

元記事を表示

AndroidのWebViewで、画面回転した後にフォーカスを当ててもソフトウェアキーボードが表示されない不具合に対する回避策

# 要件
Androidで以下のような要件がありました。

– WebView画面
– 縦画面でコメントが入力できる
– WebChromeClientから受け取ったView(動画)を全画面(横画面)で表示する

# 不具合
この時特定の端末で
「画面回転をした後に、WebView内の入力欄にフォーカスを当てても、ソフトウェアキーボードが表示されない」
という症状がありました。

# 再現手順
– 該当の画面に遷移する
– WebView内の動画を最大化して、横画面で表示する
– 縦画面に戻す
– WebView内のテキスト入力欄にフォーカスしても、ソフトウェアキーボードが表示されない

# 修正方法
回避策として、以下の実装を行いました。
“`kotlin WebViewActivity.kt
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
webView.clearFocus()
webView.r

元記事を表示

MVVM+CoroutineFlowのUnitテストを書く(準備編)

## はじめに
ついにUnitテストと真面目に向き合う時がやってきたので、採択技術や書き方をメモしておく。

## 採択したもの
– JUnit4
– Mockk
– Truth(Googleが出しているアサーションライブラリ)

↓kts化してない人は読み替えてください
“`build.gradle.kts(app)
// test
testImplementation(“junit:junit:4.13.2”)
testRuntimeOnly(“org.junit.vintage:junit-vintage-engine:5.8.2”)
androidTestImplementation(“androidx.test.ext:junit:1.1.5”)
androidTestImplementation(“androidx.test.espresso:espresso-core:3.5.1”)
testImplementation(“io.mockk:mockk:1.12.5”)
testImplementation(“co

元記事を表示

Jetpack ComposeでOSのアラーム設定を開きたい

参考
==
https://developer.android.com/reference/android/provider/AlarmClock#ACTION_SHOW_ALARMS

`AlarmClock.ACTION_SHOW_ALARMS`
というActionでIntentを作成してstartActivity

コード
==
“`kotlin
import android.content.Intent
import android.provider.AlarmClock
..
省略
..
val context = LocalContext.current
context.startActivity(Intent(AlarmClock.ACTION_SHOW_ALARMS))

“`

元記事を表示

DatePickerDialogで日付選択 + 曜日表示 | Kotlin

DatePickerを使って日付選択を行う!ということをしていたところ、
あれ?曜日が表示されない。
曜日出そうと試行錯誤しても、番号だけ表示される….
ということにぶち当たってしまいました:frowning2:

結論、
DatePickerDialogで日付表示をさせて、
その日付から曜日を求めている感じで落ち着いた。

ただ、DatePickerではCalenderを使用していますが、
曜日表示するところではLocalDateを使用しているので、
良くないとかあるのかな?という疑問は残ってる。

ので、これで良いのか悪いのか、もしよろしければ何故良くないのか、普通はこうやってやるんだよ~って教えてくださる方がいたら嬉しいです:pray:
(おかしくないよ!って事もお知らせいただけると安心します..)

## 完成図

![DatePicker選択前.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2499099/2ec702b5-3b09-51bd-f020-ad89877d3b80.j

元記事を表示

コンポーザブルのテストを爆速にする方法

# はじめに

コンポーザブルのテストを行う際に、AndroidTestディレクトリを使ってテストを行うことが多いと思います。その際に、毎回エミュレーターを立ち上げて実行するため一回のテストにかかる時間は通常のユニットテストと比べて多くかかります。

そこで、エミュレーターを使わずにコンポーザブルに対するテストを行うために、`Robolectric`を使ってユニットテストとしてテストを行ってみようと思います。

:::note
この方法は、Droid Kaigi 2022のアプリでも採用されています。
:::
https://github.com/DroidKaigi/conference-app-2022

# TL;DR

結果として、Robolectricを使って**unitTest**でコンポーザブルをテストするようにした結果、大幅な時間の短縮につながりました。

|テストの種類|時間|
|—|—|
|unitTest| 3 sec 411 ms|
|androidTest|46 sec|

# 依存関係の追加やテストのための設定

一番大事なのが、依存関係の設定です。

元記事を表示

OTHERカテゴリの最新記事