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

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

【備忘録】Geospatial API のサンプルを動かすまで

# ARCore Geospatial API 使うためのメモ

Geospatial APIを試したくてGoogle CloudやUnity 上で設定とサンプルをとりあえず動かすまでの手順の備忘録。
基本的には以下を参照した。

https://developers.google.com/ar/develop/unity-arf/geospatial/developer-guide-android

## 環境

* Unity 2021.3.4f1
* ARCore Extensions 1.31.0
* ARCore XR Plugin 4.2.3
* XR Plugin Management 4.2.1

サンプルはARCore ExtentionsのGeospatial Sampleを手元にあったAndroidでとりあえず試す。

## 手順

手順は基本的に上記のサイトベースで実施

1. [Google Cloud プロジェクトを設定する](https://developers.google.com/ar/develop/unity-arf/geospatial/deve

元記事を表示

[Android] ActionBarのUpButtonを制御する

## はじめに

Navigationコンポーネントを使用している時の、画面上部のActionBarにあるUpButton(←ボタン)の制御方法について記載します。
Navigationの導入は省きます。公式ドキュメントはこちら:[Navigationコンポーネント](https://developer.android.com/guide/navigation?hl=ja)

## Activityをfinishする

“`MainActivity.kt

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
finish()
return true
}
}
return super.onOptionsItemSelected(item)
}
“`

## 現在のFragmentによって処理を変える

“`MainActi

元記事を表示

Kotlin 今どきよくある JSON リクエストからのパース

数年で一気に変わってます、JSONの取り扱い処理。

Gson も Moshi も不要です。

“`kotlin
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
val contentType = “application/json”.toMediaType()
val json = Json {
ignoreUnknownKeys = true
isLenient = true
} // *
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(json.asConverterFactory(contentType))
.build()
}
“`

Kotlin 内蔵の serialization を使うのが良いでしょう。

[👉 Kotlin 今どきよくある JSON リクエ

元記事を表示

XMLのvariableパラメータでジェネリックな型を指定する方法

# はじめに
XML上でジェネリックなパラメータを指定する実装を少し調べる機会がありましたので、議事録的に残しておこうと思います。

# 指定方法
指定方法は以下です。

“`

“`

以上になります。
variableには特殊文字は使用できないので、記号部分は上記のように記載する必要があります。

# さいごに
上記の実装頻度は高くはないものの、実装するとなると少し考えてしまう方もいるかもしれません。
その際にはこちらの実装をお役に立てていただけますと幸いです。

元記事を表示

Jetpack Compose 勉強記録その3 (Jetpack Compose チュートリアル レッスン:4)

Jetpack Compose 勉強記録その3です。

# 今回の内容

https://developer.android.com/jetpack/compose/tutorial?hl=ja

チュートリアルの続きをやっていきます。

今回はレッスン 4:リストとアニメーションをやっていきます。

リストは必ず使うと言っても過言では無いので、気になります。

# メッセージのリストを作成する

“`MainActivity.kt
@Composable
fun MessageCard(messages: List) {
LazyColumn {
items(messages) { message ->
CardItem(message)
}
}
}
“`

“LazyColumn“ “LazyRow“
こちらを使用する事でリストを表示する事が出来るみたいです。
“LazyColumn“は縦のリストです。

“LazyRow“は横のリストです。

“items“に渡

元記事を表示

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

ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/07_Progress)
# 進捗の表示
いくつかのリポジトリの情報はかなり早くロードされるにもかかわらず、ユーザーはすべてのデータが一旦ロードされると結果リストを見るだけである。それまでは、ロード中アイコンが進捗を表示するが、どのコントリビューターがすでにロードされているのかという、現在の状態についての情報がない。
中間の結果を早めに見せ、それぞれのリポジトリのデータをロードした後で、すべてのコントリビューターを表示することができるかもしれない。
![img](https://play.kotlinlang.org/resources/hands-on/Introduction%20to%20Coroutines%20and%20Channels/assets/7-progress/Loading.gif)
この機能を実装するには、中間の状態について呼び出されるコールバックとして、UIを更新す

元記事を表示

[Android] 簡単にSnackBarの背景色を変えてみる

# 初めに
今回SnackBarの背景色を変更したい時に悩むことがあったのでここにメモとして残そうと思う。

![Screenshot_20220617-154458 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/3699876d-bad4-ccd9-e8ae-55e98530d5ac.png)

# 動作の内容

“`kotlin
//MainActivity.kt

val snackbar = Snackbar.make(findViewById(android.R.id.content),”タイトルが入力されていません。”, Snackbar.LENGTH_SHORT)
//R.color.errorはColor.xmlを参照する。
//詳しくは下記URLまで、
snackbar.view.setBackgroundResource(R.color.error)
snackbar.show()
“`

##### Color.xmlについて
https://qii

元記事を表示

【Android, Kotlin】Timerを使い一定間隔で一定処理を行う

## はじめに
IT企業入社3か月目の初学者のアウトプットです。

## やりたいこと
Timerを使って、一定間隔で一定の処理を行う
(TimerTaskの内容を繰り返し行う)

## 手順
様々な書き方があると思いますが本記事ではシンプルな書き方を記述します。
1.Timerオブジェクト作成
“`kotlin
val timer = Timer()
“`
2.TimerTaskクラスに繰り返したい処理を記載
“`kotlin
private val timerTask = task()

class task : TimerTask() {
override fun run() {
println(“hello”)
}
}
“`
3.scheduleAtFixedRateメソッドを記載
“`kotlin
scheduleAtFixedRate(TimerTask task, long delay, long period)
“`
第1引数:繰り返しを実行するクラス
第2,3引数:Long型
## サンプルコード

“`kotlin:MainAc

元記事を表示

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

ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/06_StructuredConcurrency)
# 構造化された並列性
コルーチンスコープは、異なるコルーチンの間の構造と親子関係の責務を担っている。新しいコルーチンは常にスコープの内側で開始する。コルーチンコンテキストには、コルーチンのカスタム名や、コルーチンがスケジュールされるスレッドを指定するディスパッチャーのような、与えられたコルーチンを実行するために使う追加の技術情報が格納されている。
`launch`、`async`、`runBlocking`が新しいコルーチンを開始するために使われると、対応するスコープが作られる。これらすべての関数は、引数としてレシーバーを持つラムダを取り、暗黙的なレシーバ型は`CoroutineScope`である。
“`Kotlin
launch { /* this: CoroutineScope */
}
“`
新しいコルーチンは、スコープの内側でのみ

元記事を表示

Androidでボタンを一定時間無効にする方法

# 概要

Androidのボタンの連打を防ぐためボタンが押されたら一定時間無効化したいことがあった。
そのため、ボタンを一定時間無効にする方法を記載する。
言語はKotlin

# ボタンを一定時間無効にする方法

以下のような関数を定義する。
“`Kotlin
// Buttonを指定mill秒の間無効化する
fun disableButtonFixedTime(button: Button, millSec: Long) {
button.isEnabled = false
Handler().postDelayed({ button.isEnabled = true }, millSec)
}
“`

ボタンを押したときに上記の関数を呼び出すことによって指定時間ボタンを無効化することができる。
“`Kotlin
button.setOnClickListener {
disableButtonFixedTime(it, 1000)
something() // ボタンを押したときにやりたい処理
}
“`

元記事を表示

AndroidのEditTextのつまみ部分の色をする方法

# 概要

AndroidのEditTextのつまみ部分の色を変更したいときがあった。
変更が反映されず少し手こずったので忘備録としてやり方を記載する。

# EditTextのつまみ部分の色をする方法

styleで`colorControlActivated`に変更したい色を定義する。
“`styles.xml

“`

レイアウトのTextViweのthemeにstyleを反映させるとつまみの色が変化する。
`style=”@style/CustomTextSelectionHandle”`としてもつまみ部分の色は変更されず、themeでないと反映されなかった
“`layout.xml

元記事を表示

【Android】manifestOutputDirectoryでエラーが出た時の対処法

# 概要
下記のようなエラーがでたのでその対処法。
“`
Could not get unknown property ‘manifestOutputDirectory’
“`

# 対処法
下記コードを“`manifestOutputDirectory“`使用部分の直前に追加
“`
def manifestOutputDirectory = multiApkManifestOutputDirectory.asFile.get()
“`
(もしくは、“`$manifestOutputDirectory“`を“`src/main“`に置き換える)

[参考サイト](https://stackoverflow.com/questions/64389372/could-not-get-unknown-property-manifestoutputdirectory)

元記事を表示

.NET MAUIとMAUI Blazor Appで生体認証(指紋認証)を実装してみる(Android)

# はじめに

Build 2022 にて現行のクロスプラットフォームである Xamarin.Forms の後継として、.NET MAUI(.NET Multi-platform App UI)が発表された。

![maui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633632/989f843f-3116-1592-e664-65461f8a9b0f.png)

https://dotnet.microsoft.com/en-us/apps/maui

ただし、リリースされたばかりということもあり、生体認証(指紋認証)を実装する知見があまりネットにはなかったため、備忘録としてまとめることにした。

以下のものを準備
– Visual Studio 2022 Preview
– [MAUIの開発ワークロードをきちんとインストール](https://docs.microsoft.com/en-us/dotnet/maui/get-started/first-app?pivots=device

元記事を表示

Jetpack composeでCoordinatorLayoutを実現する

NestedScrollConnectionを使ってスクロール可能な要素をスクロールした際のコールバックを受け取って、要素の高さを計算すればOK

“` kotlin
@Composable
fun Screen() {
val density = LocalDensity.current
val defaultToolBarHeight = 120.dp
val minToolBarHeight = 48.dp
var toolBarHeight by remember {
mutableStateOf(defaultToolBarHeight)
}

val nestedScrollConnection = remember {
object : NestedScrollConnection {
override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {

元記事を表示

Android の Apk リバースエンジニアリング

:::note alert
警告
リバースエンジニアリングは知的財産権に関連しますので注意して下さい。
:::

バイナリ形式のAndroidアプリパッケージ(.apk)をリバースエンジニアリングを使って判読可能なテキストファイル(ソースコード)に変換します。

用途により使用するツールを使い分けます。

**(1) Manifest.xmlなどの設定ファイルを参照**
* Apktool (classファイルをデコンパイルした結果はsmali形式となります。)

**(2) ソースコード(.Java)を参照**
* dex2jar
* JD(Java Decompiler)

### ■ apkファイルの構成
* AndroidManifest.xml
* META-INF(署名ファイル)
* res(画像等のリソース)
* classes.dex(プログラム)
* resources.arsc(言語等のリソース)

**例**
C:\StudioProjects\Hoge\app\build\outputs\apk\debug\app-debug.apk

Androi

元記事を表示

タスク管理アプリを作ろう

# 1.はじめに
これまでに3つのAndroidStudio&Flutterを書いてきた。

・環境構築方法の紹介
https://qiita.com/my1981/items/abe835e7241373713670

・簡単なプロジェクトの設定と共有方法の紹介
https://qiita.com/my1981/items/ad307498ea7fd9837d47

・エミュレータの言語設定をかえよう
https://qiita.com/my1981/items/bf75ec195b40b0930a58

今回はflutterアプリの入門編としてタスク管理アプリを作成する。

# 2.タスク管理アプリを作ろう
## 2-1.完成イメージ
アプリの完成イメージと操作方法を説明する。
①プロジェクトを実行するとタスクの描画画面が開く。タスクを追加するためにプラスボタンを押す。
task_app0.pngスクロール可能なDialogを作成するDiallog+ConstraintLayout+ScrollView

“Android dialog constraintlayout”などで調べると山のように出てくるので、ダイアログをいじろうとしたときにみんなぶつかるんだろうなあという感じです。
自分も先人たちと同じ轍を踏んだので、いつかの誰かの助けになれればと思います。

# 前提
| ライブラリ | version |
|:-:|:-:|
|material|1.6.1|
|constraintlayout|2.1.4|

# 要点
ScrollViewに`app:layout_constraintHeight=”wrap_content_constrained”`を指定するとよい。

# コード
“`dialog_scrollable.xml

元記事を表示

JavaからKotlinに変えてみる

## はじめに

🙆‍♂️「どうも運動通信社で働くAndroidエンジニアの明田です!
弊社では2021年11月頃からJavaで書かれたのAndroidプロジェクトをKotlinにゴリゴリ書き換えていっています!
Koltin化一緒に進めたいそこのあなた、この世界をKotlinにする運動にこぞってご参加してください!」

※ Kotlin化に伴い得た知見や感想などを書いている記事になります。是非参考にしてください

## Kotlinとは

2017年のGoogleがKotlinを正式にAndroidの開発言語として発表されました。
KotlinはJVM(Java仮装マシン)をサポートしているため、Javaが動くところではどこでもKotlinが動きます。

さらに、Javaが抱えている課題を解消しているのもKotlin化するメリットになります。
その導入の簡単さと、Javaとの親和性、既存プロジェクトへの導入リスクの低さが多くの企業のAndroid開発に採用されている要因ともなっています。

↓Android以外にサーバーサイドとしてKoltinを導入している企業

https://q

元記事を表示

JetpackComposeのRippleダサくない?

# 初めに
前回に引き続きJetpackComposeの記事を書いていこうと思います
今回はJetpackComposeを実装してる時に自分がこれ修正したいなぁって思って調べたものを備忘録として残しておきます

### 本文
早速ですが、実は結構簡単なんですよね。
`Modifier`でタップの挙動を制御する時に設定する`clickable`に対して以下の設定を追加してあげればいいだけです

“`kotlin
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(),
“`
`rememberRipple`内に`bounded`, `radius`,`color`を好きなように設定できます。
`bounded`は`false`を渡すことで領域を超えてエフェクトが発生します。
`radius`は大きさを指定することができ、`color`は`ripple`の色を変更することができます。

### 最後に
JetpackComposeは非常に便利な分、まだ思った通り

元記事を表示

Android12でBeaconが取得できない

# 結論
BLUETOOTH_SCANのパーミッションを要求する

`AndroidManifest.xml`
“`



<-追加

元記事を表示

OTHERカテゴリの最新記事