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

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

[Android] Material Design (Color編) 自分用メモ

Material Design 3というものができたそうですね。開発中にデザインの実装方法などググることはあっても体系的に学んだことはなかったので、復習も兼ねて、Material Design2から学びます。

## 歴史
2014年 Material Design
2018年 Material Theming
2021年 Material You
2021年にMaterial YouがMaterial Design3と呼ぶようになり、それに伴ってMaterial ThemingがMaterail Design2ということになったそうです。([参照](https://qiita.com/mkosuke/items/314242951766e413b4ab))

## Material Color
[こちらの公式](https://material.io/design/color/the-color-system.html#color-theme-creation)でいろいろ定義されているのでまとめます。
図案の公式のサイトを見ながらだとわかりやすいです。

名称|概要
—|—

元記事を表示

NCMBのFlutter SDKを使ってプッシュ通知を送信する(Android編)

NCMBのコミュニティSDK(公式サポートは提供されていません)としてFlutter向けのSDKを提供しています。Flutter SDKはiOS/Androidはもちろんのこと、Webなどでも利用できます。つまりスマートフォンネイティブの機能は提供していません。

NCMBのプッシュ通知機能は数多くの方に使われている機能でもあり、今回はFlutter SDKを使ってどうプッシュ通知機能を使えば良いのかを紹介します。まずはAndroid編です。

[ncmb | Dart Package](https://pub.dev/packages/ncmb)

## 利用するライブラリ

上述の通り、Flutter SDKにはネイティブ機能がありませんので、プッシュ通知で利用するデバイストークンを取得する機能がありません。そこで下記のライブラリを使います。

– [push | Flutter Package](https://pub.dev/packages/push)
– [flutter_local_notifications | Flutter Package](https://pub.

元記事を表示

androidで文字の置き換え(正規表現)を使ってみて

# はじめに
今回は 正規表現というものを使ったので記事にしてみます
いろいろなやり方があるので調べた時に混乱してしまうと思ったので
実装した時に一番わかりやすいやり方をメモとして残しておきます

# 正規表現

“`
val regex = Regex(“””\d+”””)
“`
もしくは
“`
val regex = “””\d+”””.toRegex()
“`
とすることでRegexクラスを使うことができます

正規表現では通常通りの文字列の指定で””を使用すると
バックスラッシュなどをエスケープすることが多くなってしまうので

“””で囲うことでそのままの文字列として扱われるので、エスケープ無しで使うことができます

例のコードにある \dというのは正規表現でいう
「すべての数字」という意味で 文字列に数字(0~9)が含まれているかどうかを見ることができます
それ以外にも正規表現用のコードがあるのでまとめてあるページをお借りしました

[基本的な正規表現一覧](https://murashun.jp/article/programming/regular-expres

元記事を表示

ADBで画面録画をする際に画面サイズの指定方法

前にADBでの画面録画方法の記事を上げました。
この方法で録画をしたものは、画面のサイズが大きく、動画の容量が大きい為、プルリクエストなどに貼る際に、加工が必要だったりします。

https://qiita.com/yuta317/items/b4bce237e2637efafc3a

今回は録画をする際に画面サイズを指定すると動画の容量が小さくなる為、おすすめな方法を書いていこうと思います。

# 画面サイズの設定方法

“`
adb shell screenrecord –size 540×960 /sdcard/hoge.mp4
“`

screenrecordの後ろに –size 録画する画面サイズ を記載すると設定できます。

簡単に設定できるので試してみてください。

元記事を表示

Android11以上でステータスバーの高さを取得する方法

# はじめに
Android12の対応をする際、ステータスバーの高さを取得する方法を変更する必要が出てきたので、その際対応した内容を備忘録的に残しておこうと思います。

# 取得方法
取得方法は比較的シンプルです。
以下のようにsetOnApplyWindowInsetsListenerを使用して取得する形になります。

“`
view.setOnApplyWindowInsetsListener { v, insets ->
val statusBarHeight = insets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top
}
“`

以上になります。
注意点としては、上記は30以上が対象になるので、30以下のバージョンでは取得方法を変える必要があります。

# さいごに
ステータスバーを透過していたりするとこの辺りの修正が必須になりますよね。
透過対応はなかなか大変な作業の一つなので、この辺りの実装は慎重に行っていきたいところです。

元記事を表示

コルーチンとチャネル入門#3

ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/03_UsingCallbacks)
# コールバックの使用
前回のソリューションは動作するが、スレッドをブロックし、そのためUIはフリーズする。これを避ける伝統的なアプローチはコールバックを使用することである。操作が完了した後に呼び出す必要があるコードを一直線に呼ぶ代わりに、それを別のコールバック、多くの場合はラムダであるが、に抜き出し、あとで呼び出すために、呼び出し側にラムダを渡す。
UIを機敏にするため、すべての計算処理をスレッドに分けるか、Retrofit APIに切り替えることができ、ブロッキング呼び出しの代わりにコールバックを使用し始める。
## バックグラウンドスレッドでの`loadContributers`呼び出し
まず初めに、すべての計算処理を異なるスレッドに移動してみよう。新しいスレッドを開始するには、`thread`関数を使う。
“`Kotlin
thread {

元記事を表示

Termux (Android版)にPowerline-Goを導入する

初めてのQiita投稿になります。
文才がないのでおかしな文章になる場合がありますが、ご了承ください。
また、Markdown記法に慣れていないのでデザイン的におかしいところもございます。ご了承ください。

# 今回行うこと
* AndroidにTermuxを導入する
* Termuxのシェルをzshに変更する
* Powerline-Goを導入する

# このような方におすすめ
Androidでシェル使うし普段LinuxとかでPowerline-Go使ってるけど、わざわざQemuとかでLinux仮想立ててするほどでもないなー--と思ってる人

# 必要なもの
* Androidスマートフォン or タブレット
※今回はXperia XZ (SO-01J、Android 7.0、root未取得)を使用しました。
* Termux **(Google Play版ではなく必ず公式GitHub or F-Droidのものを使うこと)**
※ 公式GitHub Releases:https://github.com/termux/termux-app/releases

※以下root権限

元記事を表示

cordova+android SDKのコンテナ

Cordova, Node.js, Android sdkを含んだ開発環境をコンテナで作成してみました。
android-sdkも入っているので、androidの実機動作までできます。

# 動作環境準備

WSL2とDocker desktopをインストール(Windows環境です)
vscodeにRemote Developmentを入れおきます。

# コンテナの起動

WSL2のシェルから次のコマンドを実行します

“`
$ git clone https://github.com/masahiro-999/cordova-container
$ cd cordova-container
$ code .
“`
VSCODEが開いたら、F1を押し、コマンドパレットで、Build and reopen in containerを実行

これでCordovaの開発環境が起動します。

# サンプルアプリを実行してみる

以下は、Cordovaでサンプルアプリを実行する方法です。

## プロジェクトの作成

“`
$ cordova create hello-app
$ cd

元記事を表示

Jetpack ComposeのNavigationを使うと遷移先の画面が繰り返し表示される問題

こんにちは。
最近は宣言的UIが流行っていますね。
Flutterでよく書いていてもう見慣れたのですが、初めて見たときはネストの量にギョッとした記憶があります。
最近はJetpack Composeに挑戦中です。
そんな中でログイン機能を実装していてどハマりしたので共有したいなと思い今回の記事を書くに至りました。

まず状況として、「ログインしていない場合は上からログイン画面を被せる」という仕様を満たそうとした時に、ログイン画面が繰り返し表示されてしまう不具合にハマりました。

これが起きてしまった原因は、結論から言いますと、「Composable内で画面遷移をしようとしたから」です。
具体的にどんなコードを書いていたかというと、

“`kotlin:HomeScreen.kt
@Composable
fun HomeScreen(
viewModel: HomeViewModel,
navController: NavController
) {
val uiState by produceState(
initialValue = Home

元記事を表示

sealed classってめちゃくちゃ便利じゃない?

# 初めに
今回は、sealed classについて書いていきます。

### sealed class
簡単にいうと***全然違う***`data`の型でもひとまとまりで持っておけるクラスです。
例えばですが、一つの`RecyclerView`で二種類のデータの型を表示したい時などに非常に役立つ機能です。
書き方は、以下の通りです。
“`kotlin
sealed class Example {

data class hoge(
val sample: Sample
) : Example()

data class huga(
val something: Something
) : Example()
}
“`
`Sample`と`Something`が全く別の`DataClass`でもひとまとまりに管理をすることができるので`RecyclerView`に対して`Example`クラスを渡すようにすればあとは中身を見て判断するように実装すればいいだけです。
もし、片方は何もデータを保持したくないのであれば`ob

元記事を表示

【Kotlin】複数ボタンの同時タップを制御する

Androidアプリでユーザーが複数のボタンを同時にタップできないような制御を実装していきます。
下の画像のように`Button1`と`Button2`を同時にタップすると、ダイアログが2つ表示されてしまうことがあるため(ボタン2のダイアログを消したあとにボタン1のダイアログが表示される )、同時に複数のボタンをタップできないような制御が必要となります。

また、`TabLayout`のタブに関しても同様に複数のタブを同時にタップできないよう制御が必要なケースもあり、Button時と実装方法が若干異なり、日本語での記事がなさそうだったので記載しておきます。

![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484337/037c26d1-73a6-cafa-cac7-860d80116f2b.gif)

## ボタンの同時タップ制御の実装
制御実装前のコード
“`activty_main.xml

<

元記事を表示

スマホアプリのコマンドビルドまとめ(Xamarin編)

前回の『[スマホアプリのコマンドビルドまとめ(iOS編)](https://qiita.com/gremito/private/41cf9a0c8d27eccdf165)』に引き続き、今回は**XamarinのCI環境を作る際に溜まった知見**をまとめた記事です。

前提として、Mac mini/Mac Pro(ゴミ箱)などにCI環境を作り、その際にXamarinアプリの.ipa/.apkファイルをビルドする環境も作るときに必要な作業として淡々とまとめています。

## 環境

* macOS
* CI
* Jenkins
* Xamarin
* MyApp.iOS.csproj
* MyApp.Droid.csproj

## `msbuild`と`xbuild`について

XamarinのアプリをCLIからビルドしたいと思い、『xamarin mac build command』という感じでググっていると`MSBuild`と`xbuild`についてちょいちょい出てきます。Xamarinなので記事が古いものが多く引っかかり、個人的に参考になった記事の中で[

元記事を表示

FatでjavaなActivityのリファクタの進め方を検討したメモ

はじめまして。リファクタ勉強中のAndroidエンジニア5年生です。
テストがないFatなActivityのリファクタを進めるうえで検討した内容を残しておきます。
テストがないようなプロジェクトしか経験しておらずこの辺は勉強し始めたばかりです。

いまはまだ小さめのクラスで試しただけのものなので、実際に運用するなかで得た知見があれば追記していきます。

ご意見・ご指摘あればお伝えいただけるととても嬉しいです。

# 背景

– 機能追加にあたってリファクタが必要だった。
– ロジックとかはActivityが持ってしまっている。
– javaで書かれているのでKotlinにしたい。
– テストがないのでテストを書きたい。

# リファクタの流れ

1. リファクタ対象のActivityが動くシナリオでUIテストを書く。
2. Activityの子クラスを作り、既存コードからはそちらを参照させる。親クラスは抽象クラスにしておく。
3. ロジックはViewModel以下へ、UIの操作はすこしずつKotlin化して子クラスへ移動させていく。ViewModelにはテストを記述していく。

##

元記事を表示

Androidの自動バージョンインクリメントをgradleのタスクで実行

CIなどで自動化するときにバージョンもついでに上げたくなるのでこの設定で最近は落ち着いたので備忘録メモ
ktsしたいけど、taskはまとめてgroovyにまだしてる。アプリのbuild.gradleはktsが主流なのでそっちに合わせるってことで。

appフォルダの下にversion.propertiesファイルを用意

“`version.properties
VERSION_NAME=1.0.0
VERSION_CODE=1
“`

build.gradleに下記のtaskを用意

“`build.gradle
task updateVersion {
doFirst {
def pattern = “^(\\d+).(\\d+).(\\d+)”
def versionPropsFile = file(‘./app/version.properties’)
def Properties versionProps = new Properties()
versionProps.load(new FileIn

元記事を表示

CameraXでオートフォーカスが停止する

## CameraXで継続的なオートフォーカスが停止する問題

AndroidのCameraXを利用していて何かをきっかけに継続的に動作しているオートフォーカスが停止してしまうことがありました。特に背面カメラでプレビューしている時にカメラを下に伏せて置いた後、持ち上げるとプレビューがぼやけたまま停止するケースが頻度が高いように感じました。
もしかするとスマホ(GalaxyS9)に依存した問題なのかもしれませんが、問題が解消した方法を共有しておきます。

“`kotlin:CameraFragment.kt
@SuppressLint(“UnsafeOptInUsageError”) // ←追記
private fun bindCameraUseCases() {

// 以上省略

// A variable number of use-cases can be passed here –
// camera provides access to CameraControl & CameraInfo
camera = cameraProvider.

元記事を表示

[Android] JCenter 依存解消でやったことメモ

# はじめに
Android アプリではいろいろなライブラリをオープンなリポジトリからダウンロードして利用しています。
そのリポジトリの中に `JCenter` というモノがあり、[2021年5月で閉鎖するという発表](https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/)がありました。

この `JCenter` というリポジトリ、大体の Android アプリで参照されてるんじゃないかってぐらい主要なリポジトリなので Android 界隈がざわつき、閉鎖期限の延長もされたのですが、あまりに影響が大きすぎたため閉鎖はされずに読み取り専用で存続することになりました。

(詳細については [コチラの記事](https://bps-tomoya.hateblo.jp/entry/2021/02/04/184317) がとてもわかりやすかったです。ありがとうございます。)

読み取り専用で存続することになったとは言え、またいつ方針が変わるかわからないので JCenter の依存を解消す

元記事を表示

Agora.ioを使ったAndroidの音声配信!

こんにちは、AWAでAndroidアプリ開発をしている佐藤です!
このたび、AWAで音声配信機能がリリースされました :tada:

https://www.cyberagent.co.jp/news/detail/id=27670

AWAの音声配信は自前で全て実装しているわけではなく、 [Agora.io](https://www.agora.io/en/) を使って実現しています。
そこで、Agora.ioを使って音声配信機能を実現する上での簡単なサンプルと、いくつかのハマりどころについて記載しようと思います。

# 前置き

– 使用するバージョンは `io.agora.rtc:voice-sdk:3.5.0` です
– 音声配信のみです。動画配信はしていません
– Agora.ioへのユーザ登録は既に済ませているものとします

# 実装する上で

Agoraはとてもサンプルが充実しており、日々アップデートされています。そのため、まずはサンプルを使って出来ることを把握しつつ、アプリに取り込む作業を行っていくと良いと思います。Androidのサンプルは以下にまとまっているので確

元記事を表示

Galaxyのデバイスでspotifyがつかえなくなる問題

Galaxyのスマホ又はタブレットを使おうと考えている方へ。

Galaxyのスマホ又はタブレットではspotifyが正しく動作しません。

Issueについては英語ですが、ここなどを参照してください。
https://community.spotify.com/t5/Ongoing-Issues/Now-Playing-bar-missing-on-Android/idi-p/5364978

タブレット購入の際などの参考になれば幸いです。

ちなみに、このバグはアプリを強制終了してもういちどアイコンをタップして起動する事で一時的に解消されます。

元記事を表示

localhostで立ち上げアプリをスマホからアクセスする方法[Android , iPhone]

## 概要
開発中のWebサイトの表示確認を実機で手軽にできる方法を紹介いたします!
Android,iPhoneだと若干勝手が違うので詳しく解説いたします。

## 今回使用した端末
[PC]
Mac Book Pro (Monterey)

[スマホ]
iPhone SE2 (iOS 15)
Galaxy Note 8 (Android 8)

## 前提条件
– PCとスマホが同じWifiに接続されていること
– PC上でローカルアプリが立ち上がっていること

## 手順 [iphone]
### 準備
– 設定アプリを開く
– [Wi-Fi] -> 接続しているWi-Fiの「iアイコン」押下
– HTTPプロキシの「プロシキを構成」 -> 「手動」を押下
– 画像のようにlocalhostで立ち上がっているアプリの情報を入力
※サーバー、ポートの情報は各自の環境のものを入れてください
![IMG_9A37A159AA9C-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2580122/1

元記事を表示

[Kotlin][Android] object と Serializable

## 状況説明

Android アプリ開発をしていて、ちょっと困った状況になりました。
すぐに解決したんですが、こんなことがあるのね、と勉強になったのでこれを書いています。

その「ちょっと困ったこと」は Activity 間であるデータをやり取りしようとしていて起こりました。

### 渡すデータ

Activity 間でデータの受け渡しをするために、次のような sealed class を作成したとします。
(実際のコードとは異なります)

“`kotlin
sealed class Answer : Serializable {
object Yes : Answer()
object No : Answer()
data class Other(val text: String) : Answer()
}
“`

### 呼び出し側

`Answer` クラスは `Serializable` を実装しているので、 Intent の putExtra() に渡せます。
今回は仮に `Yes` を渡すことにします。

“`kotlin
val int

元記事を表示

OTHERカテゴリの最新記事