20220214のAndroidに関する記事は2件です。

onNewIntentで状態を更新する(Jetpack Compose)

はじめに Jetpack Composeを使用している状況でActivityのonNewIntentやonActivityResultでアプリの画面状態を更新する方法についての記事となります。 Jetpack Composeでは状態をMutableStateとして保持し、rememberを使用することで再Compose後も状態を保持することができます。ただしこれら基本的に特定のComposable関数以下のスコープ内に制限されてしまい、onNewIntentやonActivityResultからどうやって更新すればいいんや~だったたのでコードを書いてみたという流れになります。 やったこと 方針としてはMutableStateをActivityのメンバとして保持し、その値をrememberでComposable関数に記憶させます。 1.Activityのメンバ変数にMutableStateで変数を持たせる。 ここで定義した値をonNewIntentやonActivityResultで更新し、それらを読みこむComposable関数を更新させる算段です。 class MainActivity : ComponentActivity() { private val _message = mutableStateOf("initial message") } 2.rememberで再Compose後も状態を保持する。 class MainActivity : ComponentActivity() {  // 他省略 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val message by remember { _message } Text(text = message) } } } 3.onNewIntentでMutableStateを更新する。 class MainActivity : ComponentActivity() { // 他省略 override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) _message.value = "onNewIntent" } } 結果 onCreateの後にonNewIntentを呼び出しています。 感想 結構簡単にできました。 ちなみに自分はほかのアプリから明示的Intentで起動できるアプリを作成しており、onNewIntentで値をもらってUIに反映するということがしたかったという背景があります。 またonNewIntentを呼ぶにはActivityのLaunchModelがsingleTaskなどになるようにあらかじめ設定してあげましょう。 それと、今回の場合rememberは使わなくても良いのでしょうかね。rememberはComposition前後で値を保持し続けるための処理ですが、今回の場合値をメンバで保持しているため、rememberがなくても値は取得できていました。 以上です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu 20.04でCommand line toolsのダウンロードからAndroidエミュレーターを動かすまで

はじめに Android Studio経由の説明が多いので、Command line toolsのダウンロードからAndroidエミュレーターを動かすまでの手順を残しておく。 環境変数ANDROID_SDK_ROOTの設定 Command line toolsはじめ、sdkをインストールするフォルダのルートをANDROID_SDK_ROOTとして環境変数に設定する。 例えば、/home/user/android/sdkを環境変数に設定する場合は、以下の通り。 ~/.bashrcに書いておく。 $ export ANDROID_SDK_ROOT=/home/user/android/sdk javaのインストール aptコマンドを使って、openjdkをインストールする。今回はopenjdk-17を使用した。 あとはPATHを通しておく。 JAVA_HOME="/usr/lib/jvm/java-1.17.0-openjdk-amd64" Command line toolsのダウンロード 以下からCommand line toolsの最新版をダウンロードする。 Command line toolsのインストール ダウンロードしたzipファイルを展開する。 展開したフォルダ名はtoolsフォルダとして以下のよう配置にする必要がある。 $ANDROID_SDK_ROOT └── cmdline-tools    └── tools sdkmanagerによるパッケージのインストール $ANDROID_SDK_ROOT/cmdline-tools/tools/binにあるsdkmanagerを使用してパッケージをインストールする。 エミュレータを動かすためにインストールしたパッケージは以下の通り。 emulator build-tools;* platform-tools platforms;* system-images;* $ ./sdkmanager --install "<package name>" sdkmanagerコマンドの詳細は以下。 avdの生成 エミュレーターで動かす仮想イメージ(avd)を生成するため、$ANDROID_SDK_ROOT/cmdline-tools/tools/binにあるavdmanagerを使用する。 今回の例では細かなオプションの指定は省略。 $ ./avdmanager create avd -n "<avd name>" -p "<system-images name>" avdmanagerコマンドの詳細は以下。 エミュレーターの実行 $ANDROID_SDK_ROOT/emulatorにあるemulatorでエミュレーターを実行する。 $ ./emulator @<avd name> emulatorコマンドの詳細は以下。 kvmの実行権限がない等々のエラーが出力される場合は、出力内容を参照してエラーを解消する。(kvmグループにuserを追加して再起動) 参考情報 Android Studioからエミュレーターを起動する際の情報は公式で。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む