- 1. Jetpack Composeで動的に表示を切り替える
- 2. TextViewでRtL言語も強制的にLtR方向に表示する
- 3. Samsung Remote Test Lab使用レポート
- 4. UsageStatsManagerからアプリ使用履歴を取得する.
- 5. 【Android_java】AndroidStdioでアクションボタンを追加する方法
- 6. 【Android_java】関連まとめ記事
- 7. 【kotlin】遅延させる方法
- 8. 【Kotlin】TabLayout + ViewPager2とFloatingActionButtonでモダンなボトムタブを作成する
- 9. ラブラリ/モジュールのGradle/Mavenの依存関係伝搬について
- 10. 【Android】データ セーフティ セクション対応しないと審査に落とされる話
- 11. 【Androidアプリ開発】PNG画像をベクター画像(SVG形式)に変換して色も変更してアプリアイコンに設定する方法
- 12. 【Android】LifecycleOwner として Fragment 自身ではなく viewLifecycleOwner を使うべき場合
- 13. Android位置情報取得についての覚書き
- 14. [Kotlin]ファイル名が被ってimportするとどっちかがフルパスになっちゃうとき(メモ)
- 15. [Kotlin]sealed interfaceの使い道(メモ)
- 16. FusedLocationProviderClientがclassからinterfaceになった。ライブラリとのバージョン不一致に気をつけろ
- 17. Android端末で画面回転のイラッを解決する
- 18. Androidジェスチャーナビゲーションエリアの背景色変更方法
- 19. CoroutineWorker がキャンセルされたときの後始末をしたい
- 20. 【Android】Twitter SDKを使ってOAuth認証~ブックマークを取得するまでの実装
Jetpack Composeで動的に表示を切り替える
# 初めに
今回は`JetpackCompose`で実装している時に動的に表示を切り替える簡単なやり方を紹介していこうと思います。
### 本文
早速紹介していこうと思います。
まず、下記のメンバー変数を`@Composable`内部で宣言してください
“`kotlin
val visible = remember { mutableStateOf(false) }
“`
こうすることで宣言した`@Composable`が除去されるまで再度`compose`されても`remember`が`visible`の状態を監視し続けてくれます。
この`visible`を切り替えたい`View`の`expanded`に設定をしてあげることで簡単に表示を切り替えることができます。
表示・非表示の切り替えだけでなく、状態を監視してくれてるので`EditText`などへの入力がされた時に随時更新したい場合などでも使うことができます。
### 最後に
公式のサイトを参考にすごく噛み砕いて説明をしてみました。
https://developer.android.com/jetpack/compose/s
TextViewでRtL言語も強制的にLtR方向に表示する
## はじめに
RtLの言語の文字が入っているTextViewにより大きくレイアウトが崩れてしまったため、強制的にLtR方向になるように指定したい。
RtL言語へのローカライズ対応予定がないため今回は強制的にLtRにしたが、多言語対応の面ではレイアウトをRtLに対応させた方が良いhttps://developer.android.com/training/basics/supporting-devices/languages?hl=ja
## 修正
xmlにて以下のように`android:textDirection=”ltr”`指定すると強制的にLtR方向に指定できる“`xml:activity_main.xml
Samsung Remote Test Lab使用レポート
# 前言
リモートテストキットは、個人の電子メールを使用して無料で登録できないためです。 代わりに、Samsung Developers のリモート テスト ラボ プラットフォームに移行しました。
# 利用条件
以下は、Remote Test Lab (以降、RTL) Web クライアントを使用するための前提条件です。Samsung 開発者アカウント
Google Chrome ブラウザ
# RTL Web クライアントを起動する
RTL Web クライアントを起動するには、Chrome ブラウザーを開き、RTL Web ページに移動します。 このページでは、デバイスが製品ラインに分類されています。 各製品ページで利用可能なデバイスを確認できます。![2022-11-15_10-12-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2608200/be6a5df8-1f81-8fdf-2bb2-7e0ce24f6e7a.png)
次に、Samsung アカウントにログインします。 そうでない場合
UsageStatsManagerからアプリ使用履歴を取得する.
UsageStatsManagerからアプリの使用履歴を取得します.
# まえがき
私は,研究でユーザのアプリ使用履歴を取得し,解析を行っています.目標は,スマートフォン側でアプリ使用履歴を取得し,このデータを蓄積させることです.
UsageStatsManagerは,細かい使用履歴を取ろうとすると,10日分ほどしか取得することができませんでした(頑張ればもっと取れるのかも…).
そこで,一日に一度,バックグラウンドでその日一日分の使用履歴を取得し,アプリ内データにテキストファイルとして保存するようなアプリを作成します.こうすることで,何もしなくても使用履歴データが毎日取得できるわけです.手順をまとめると
1. UsageStatsManagerからアプリの使用履歴を取得する.
1. テキストファイルとしてローカルに保存する.
1. WorkMangerを使って一日に一度データを取得できるようにする.と言った具合です.
本記事では,1.の**UsageStatsManagerからアプリの資料履歴を取得する**という部分についてまとめます.
## 権限の取得
Usag
【Android_java】AndroidStdioでアクションボタンを追加する方法
– 基本的にスクリーンショットが多い記事になりますのであらかじめご了承ください。
※この記事はあくまでも勉強を始めたばかりの自分メモになります。# アクションボタンの追加方法
Androidアプリでよく使用される右上のボタン(**アクションボタン**)の実装方法になります。
![3.アクションボタン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962146/01fc4e16-da2e-b637-b526-a652b6a9b005.png)## xmlファイルの準備
### メニューxmlファイルを用意する1. プロジェクトを立ち上げる。
2. オレンジ枠で囲まれている`res`フォルダの中に`新規`で`Androidリソース・ファイル`を選択。
![1.新規メニューxmlを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2962146/7ef305c8-6f87-88e3-9d66-3823b
【Android_java】関連まとめ記事
# 【Android_java】関連まとめ記事
– アンドロイド開発の勉強として自分メモの代わりに作成した記事のまとめになります。
– 順不同で掲載していきますので、記事を探さす際は`Ctrl+F`で検索することをお勧めします。## 記事
– 【Android_java】AndroidStdioでアクションボタンを追加する方法
https://qiita.com/PONchan9848/items/6a2dec1b3173659dc123
【kotlin】遅延させる方法
# はじめに
今回はコルーチン内で処理を遅延させる方法を記事にします!参考にしたページも併せて載せておきます
[kotlinx.coroutines1.6.4](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/delay.html)
[kotlin公式](https://developer.android.com/kotlin/coroutines/test?hl=ja)
# delay
やり方は使用しているCoroutineScope内でdelay()というsuspend関数を呼び出し引数にLongで遅れさせたい秒数を記述します
“`
val textView: TextView = findViewById(R.id.text_view)suspend fun delayDisplayText() = withContext(Dispatchers.IO) {
delay(1000L)
【Kotlin】TabLayout + ViewPager2とFloatingActionButtonでモダンなボトムタブを作成する
## 作りたかったもの
これが今回の完成形になります。
個人的にはかなり満足な画面になりました。
#### ソースコード
https://github.com/arutoria000/arutoria_apps/tree/feature/step1_custom_tablayout_add# 前提条件
## 環境
・Android Studio Dolphin | 2021.3.1
・Kotlin : 1.7.20## ライブラリ
・androidx.viewbinding.ViewBinding
・androidx.constraintlayout.widget.ConstraintLayout
・androidx.viewpager2.widget.ViewPager2
・
ラブラリ/モジュールのGradle/Mavenの依存関係伝搬について
ライブラリやモジュールを作る時、依存関係を伝搬させるかどうかという話が出てきます。
この考え方をちょっと勘違いしていました。通常、依存関係のあるライブラリは**implementation**を使います。
“`kotlin
implementation(“com.example.library:library:1.0.0”)
“`これがライブラリで、pomファイルを出力すると、scopeは**runtime**となります。
“`xml
com.example.library
library
1.0.0
runtime
“`一方、依存関係をライブラリ/モジュールの利用側に伝搬させたい場合は、**api**を利用します。
“`kotlin
api(“com.example.library:library:1.0.0”)
“`これがラ
【Android】データ セーフティ セクション対応しないと審査に落とされる話
# はじめに
みなさん、データ セーフティ セクションってご存知ですか?
GooglePlayが提供している機能の一つですが、公式の説明を抜粋すると、
`アプリが収集または共有するユーザーデータをユーザーに把握してもらい、アプリの主なプライバシーとセキュリティの方針を紹介するための簡単な方法です`
だそうです。
本日はこちらに関して、対応しないと審査に落とされるよ、というお話をしたいと思います。# データ セーフティ セクション未対応で審査に落とされる話
データ セーフティ セクションは先ほど述べたとおり、ユーザーに対してアプリが取得するデータがなんなのかを通知する仕組みであるわけですが、こちらの対応が`2022年8月22日`までに対応必須だったことはご存知でしょうか?
もしかするとご存知なくアプリの審査を落とされたなんて方が中にはいるかもしれません。データセーフティーセクションはPlayConsole上で、`アプリのコンテンツ > データセーフティ` と確認すると設定有無が確認できます。
未設定の場合は以下のような表記になっているはずです。![データセーフティセクション
【Androidアプリ開発】PNG画像をベクター画像(SVG形式)に変換して色も変更してアプリアイコンに設定する方法
[yamaday0u](https://twitter.com/yamaday0u)です。
会社のタスクで、アプリアイコンに設定したいPNG画像をベクター画像にする時にかなり苦戦したので、同じ苦労をする人を少しでも減らせるよう、解決した方法を紹介します。
本記事の内容は以下のとおりです。
– PNG画像をベクター画像(SVG形式)に変更(無料サービスを利用)
– Android Studioでアイコン設定
– ベクター画像の色を変える## PNG画像をベクター画像(SVG形式)に変更(無料サービスを利用)
説明用のサンプル画像として以下のPNG画像を使用します。
(【Android】LifecycleOwner として Fragment 自身ではなく viewLifecycleOwner を使うべき場合
`Fragment` クラスは `LifecycleOwner` インターフェイスを実装しています。
しかし `LifecycleOwner` オブジェクトとして、`Fragment` オブジェクト自身ではなく、
`Fragment.viewLifecycleOwner` プロパティが返すオブジェクトを使うべき場合があります。本稿では、まず前提となる ライフサイクル、`Lifecycle` クラス、`LifecycleOwner` インターフェイス について簡単に説明してから、その本題について説明します。
## ライフサイクル
アクティビティやフラグメントにはライフサイクルがあります。
![アクティビティのライフサイクル](https://developer.android.com/guide/components/images/activity_lifecycle.png?hl=ja “アクティビティのライフサイクル”) ![フラグメントのライフサイクル](https://developer.android.com/static/images/fragment_lifec
Android位置情報取得についての覚書き
## 概要
「移動している状態で位置情報を欲しいとき高精度で最新かつほぼ最新の値で取りたい。けど、位置情報を更新し続けて常に最新を保つほどでもない。電池効率も悪いし。」
という状況になったときに
FusedLocationProviderClient.getCurrentLocation()
に当たりました。
ただこのような有用メソッドがありつつ、あまり調べてもあまり良い記事に当たらなかったので(調べ方が雑なだけ?)
[AndroidDevelopers](https://developer.android.com/training/location/retrieve-current “直近の位置情報を取得する”)にもちょこっと書いてあるだけで具体的なコードはなし。正直まだ分からないところもありますが、他の位置情報取得APIと合わせてメモ書き
前置きはいらねーぜという方は「getCurrentLocation()を使う」だけ見れば良い## LocationManager
位置情報取得の一例としてはLocationManagerを使うのが昔ながら(?)のやり方だと思う。
こちらは
[Kotlin]ファイル名が被ってimportするとどっちかがフルパスになっちゃうとき(メモ)
## 答え
importのところに as を使って新しい名前をつけてあげる。## 公式
https://kotlinlang.org/docs/packages.html#imports## 例
“`
import org.example.Message
import org.test.Message
“`ファイルは違うんだけどMessageって名前被ってるからどっちかがフルパスになる…
## なので
“`
import org.example.Message
import org.test.Message as testMessage
“`下のtest.Messageの方をtestMessageってことで名前をつけてあげる。
使う感じ
“`
import org.example.Message
import org.test.Message as testMessagefun xxx():String{
Message.foo() + testMessage.bar()
}
“`みたいな。
[Kotlin]sealed interfaceの使い道(メモ)
## 使い所
– enumみたいに使いたいとき
– elseを書きたくないとき
– (他にもあるはずだけど私はわからない)## sealed interfaceとは
– ざっくり、「interfaceを継承できる範囲に制限をかけれる」
– interfaceの中に書いたやつ、もしくは同じファイル内のやつしか継承できない。
– なのでwhenで条件分岐したときに”else”が要らなくなる。## 例:ただのinterfaceの場合
“`
fun eval(expr: Expr): Int =
when (expr) {
is Num -> expr.value
is Sum -> eval(expr.left) + eval(expr.right)
else -> throw IllegalArgumentException(“Unknown expression”)
}interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Exp
FusedLocationProviderClientがclassからinterfaceになった。ライブラリとのバージョン不一致に気をつけろ
com.google.android.gms:play-services-location:21.0.0にて、`FusedLocationProviderClient`, `ActivityRecognitionClient`, `GeofencingClient`, `SettingsClient`がclassからinterfaceに変わったらしいです。
https://developers.google.com/android/guides/releases
> `FusedLocationProviderClient`, `ActivityRecognitionClient`, `GeofencingClient` and `SettingsClient` are now interfaces instead of classes, which helps enforce correct usage and improves testability.20.0.0 までの`FusedLocationProviderClient`の使い方は以下のような形かと思います。
“`
Android端末で画面回転のイラッを解決する
# はじめに
スマートフォンで写真や動画を見ているときに、写真や動画の向きを画面にあわせるのにイラッとしたことはありませんか?
そんな時に、スマフォを振るだけで横向き固定・縦向き固定に強制する方法です。
Youtubeアプリでも、動画を横向き再生画面と、縦向きの説明やコメント画面を容易に切り替えることが出来ます。# 方法
MacroDroid というデバイス自動化アプリを使用します
https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid以下のようなマクロを2つ登録します
### 画面回転
端末の自動回転がOffの時に、端末をシェイクすると
横画面⇔縦画面 のトグルで画面を回転させ固定します。
詳しい設定方法や解説は、ここでは説明しません。
あくまで、「こんな便利なことが出来ますよ」というのが、この投稿の趣旨です。
ただし、少しだけ解説すると縦と横のトグルを実現するために、ユーザ定義変数x(変数名は任意)を定義して実行のたびにTrueとF
Androidジェスチャーナビゲーションエリアの背景色変更方法
今回はジェスチャーナビゲーションエリアの背景色を変更してみたいと思います。
ジェスチャーナビゲーションエリアとはどこかというと、下の黒の部分です。
![Screenshot_20221026_124713.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/350602ac-7506-e6b0-ba91-382db89a1a9e.png)
こちらの色を変更していきます!
※Android 10(API レベル 29)以降の Android 対象です。
公式
https://developer.android.com/training/gestures/gesturenav?hl=ja#edge-to-edge
# ジェスチャーナビゲーションエリアの背景色変更方法
“` values-v29/themes.xml