メッセージボックスを出す

この記事を作った動機 単に簡易的にメッセージボックス的なものを出す方法を記録するだけ。Toast とかいう名前の API で、win32 API とかの MessageBox と比べて、だいぶ非直感的な名前な気がする。まあ多用すれば慣れるってことなんでしょうけど。。。 メッセージを出す 今回は、ボタンを押したらメッセージが出てくるようにする例を置いてみる。 // 呼び出されたアクティビティの onCreate 関数内にて val registerButton = findViewById<Button>(R.id.Register) registerButton.setOnClickListener{ Toast.makeText(this, "test", Toast.LENGTH_SHORT).show() finish() } 参考にしたサイトとか Toasts overview | Android Developers https://developer.android.com/guide/topics/ui/notifiers/toasts (2025年6月24日) MessageBox function (winuser.h) - Win32 apps | Microsoft Learn https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox (2025年6月24日)

June 24, 2025

前のアクティビティに戻る

この記事を作った動機 アクティビティの遷移方法をたんに記録するだけ。今回は二つの実装について書く。一つは単に、前のアクティビティに戻るだけで、もう一つは何か処理をしてから戻る方法について書く。 ただ戻るだけの時 具体的な処理をしない場合については以下のように実装できる。AndroidManifest.xml に親アクティビティ(android:parentActivityName)を設定する。コードは不要な模様。 ... <activity android:name=".loginActivity" android:exported="false" android:label="@string/login_activity" android:parentActivityName=".shareFolderListActivity1"/> ... 何か処理をしてから戻りたいとき 今回の場合でいえば、登録ボタンを押したら、フォームに打たれた情報をもとに何かしら処理を施してから元のアクティビティに戻りたい時は、以下のように finish() を呼び出す。 ... // 呼び出されたアクティビティの onCreate 関数内にて val registerButton = findViewById<Button>(R.id.Register) registerButton.setOnClickListener{ // 何かしらの処理 finish() } ... 参考にしたサイトとか How to Go Back to Previous Activity in Android? - GeeksforGeeks https://www.geeksforgeeks.org/how-to-go-back-to-previous-activity-in-android/ (2025年6月24日) Go Back to Previous Activity in Android https://www.tutorialspoint.com/how-to-go-back-to-previous-activity-in-android (2025年6月24日)

June 24, 2025

アクティビティを呼び出す

この記事を作った動機 ちょっと自分のために、アクティビティの呼び出し方をまとめるだけ。今回はボタンが押されたら、特定のアクティビティを呼び出すという動作について、例を載せておく。 アクティビティの呼び出し方(onCreate 関数内) val loginUIcall = findViewById<FloatingActionButton>(R.id.loginUIcall) loginUIcall.setOnClickListener { val activity = Intent(this,loginActivity::class.java) startActivity(activity) } 参考にしたサイトとか インテントとインテント フィルタ | App architecture | Android Developers https://developer.android.com/guide/components/intents-filters?hl=ja (2025年6月22日)

June 22, 2025

Android アプリでネットワーク接続に対応するの続き 1

この記事を作った動機 Android アプリでネットワーク接続に対応する の続きの記事です。前の記事でやっていたことに関して、進展があったので、とりあえず忘れないうちに記録しようというわけです。 まあ、理解より先に動くことを試していたので、間違ったこととかも書いていること大いにあり得ます。これはあくまで自分の理解を深めるために記事として書いてしまおうという感じです。ご注意ください。(それは他の記事でも言えることですが。。。) コード 専用クラス(ViewModel)にて ... class smbOperation1 : ViewModel(){ private val userLiveData = MutableLiveData<String>() val user: LiveData<String> get() = userLiveData init { // trigger user load. } fun doAction() { viewModelScope.launch { val test = withContext (Dispatchers.IO) { testSMB() } userLiveData.value = test } } ... } アクティビティ内にて ... class shareFolderListActivity1 : AppCompatActivity() { // https://github.com/hierynomus/smbj private val smb by viewModels<smbOperation1>() override fun onCreate(savedInstanceState: Bundle?) { ... val debugTestStart = findViewById<Button>(R.id.debugTestStart) val debugText = findViewById<TextView>(R.id.resultAndDebugConsole) smb.user.observe (this){ message: String -> debugLog(message) debugText.setText(message) } debugTestStart.setOnClickListener{ smb.doAction() } } ... } わかったこと(現時点での理解) LiveData というのを使う方仕組みの方が新しいっぽい AsyncTask クラスとは異なる、kotlin 側で用意されたスレッド管理の仕組みを使う方が簡単そう LiveData UI と ViewModel クラス間におけるデータの橋渡し的なやり取りを行う。UIスレッド側で監視される変数的なものである。ViewModel クラスのインスタンスのうち、 LiveData に変更があり次第オブザーバー内に登録された処理が実行され、UIが更新される。 ...

June 21, 2025

Android アプリでネットワーク接続に対応する

この記事を作った動機 単に、ネットワークを使うだけで、パーミッション周りの設定と、UIスレッドと分離されたスレッドによる、非同期処理が必要なので、忘れる前に記録しておこうという話。 権限の設定(AndroidManifest.xml) android.permission.INTERNET の権限を追加 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.INTERNET" /> ... </manifest> 権限を許可したいときに確認すべきところ Manifest.permission | API reference | Android Developers https://developer.android.com/reference/android/Manifest.permission (2025年6月14日) 非同期処理(とりあえず動くというだけ kotlin) 本当のところは、AsyncTask は廃止なので java.util.concurrent を使うべきらしい。 参照すべきドキュメント AsyncTask | API reference | Android Developers https://developer.android.com/reference/android/os/AsyncTask (2025年6月14日) 専用にクラスを定義する package com.example.smbfileviewer import android.os.AsyncTask import android.util.Log import com.hierynomus.smbj.SMBClient import com.hierynomus.smbj.auth.AuthenticationContext import com.hierynomus.smbj.session.Session import com.hierynomus.smbj.share.DiskShare import com.hierynomus.smbj.share.Share class smbOperation(val handler: (message:String) -> Unit) : AsyncTask<Void,Void,Unit>(){ override fun doInBackground(vararg params: Void?): Unit { handler(testSMB()) } fun testSMB(): String{ val client = SMBClient() // 何かネットワークを使う処理をする // 今回は SMB ファイルサーバのライブラリを試すという前提で。 return "do something" } } 作ったクラスをボタンを押されたときとかに呼び出す // 何かのアクティビティクラスの onCreate 内などのUIの処理にて class shareFolderListActivity1 : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { val debugTestStart = findViewById<Button>(R.id.debugTestStart) debugTestStart.setOnClickListener{ val instance = smbOperation({ message -> debugLog(message) }) instance.execute() } } } 次の記事 Android アプリでネットワーク接続に対応するの続き 1 参考にしたサイトとか java - How can I fix ‘android.os.NetworkOnMainThreadException’? - Stack Overflow https://stackoverflow.com/questions/6343166/how-can-i-fix-android-os-networkonmainthreadexception (2025年6月14日) java - Permission for sockets - android manifest - Stack Overflow https://stackoverflow.com/questions/56582336/permission-for-sockets-android-manifest (2025年6月14日) Manifest.permission | API reference | Android Developers https://developer.android.com/reference/android/Manifest.permission (2025年6月14日) AsyncTask | API reference | Android Developers https://developer.android.com/reference/android/os/AsyncTask (2025年6月14日)

June 14, 2025

Android アプリで最初に起動するアクテビティを指定する

この記事を作った動機 自分用の android studio におけるアプリ開発時に引っかかる部分の記録です。単にアクテビティなしのテンプレートからアプリを作ろうとしたとき、アプリ起動時のアクテビティを指定する必要があり、そのやり方を毎回忘れるというのが、この記事を書くきっかけです。 重要な部分(引用部分) <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> AndroidManifest.xml の全体像の例 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.FileShareViewsmb" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 参考にしたサイトとか android - Change application’s starting activity - Stack Overflow https://stackoverflow.com/questions/3631982/change-applications-starting-activity (2025年5月1日)

May 1, 2025

Android版 Chrome でデバックする

この記事を書いた動機 自分用のメモとして、実際にやったことを記録し、ノートを取るみたいな感じにしたいと思ったのと、私は、自分用のWebアプリみたいなのを開発しているのだが、その過程でスマホ版のブラウザでのデバックをしたくなったというのがある。 二番煎じではあるが、他のブログでの説明はなんか画像とか少なくて不満があったというのもあり、ならば自分でやってみたらというところも経緯としてある。(自分も人のこと言えたほど大したこと書けないけど。。。) 環境 スマホ側 Pixel 5a 5G Android版 Chrome 131 Android 14 PC側 Windows 11 (linux環境でも同じことはできると思う) Windows版 Chrome 131 イメージ 概要 adb コマンドの環境構築 USBデバックの接続 PCで chrome://inspect/#devicesを開く デバックしたいタブを選択して終わり デバックの仕方 adb をインストールする(PC側) 開発ツールをダウンロード 今回は、以下のページから"platform-tools-latest-windows.zip"をダウンロード SDK Platform-Tools リリースノート | Android Studio | Android Developers 開発ツールを展開と配置する 適当な場所(ダウンロード)とかで展開し、配置する。今回は、“C:"直下に開発者ツールを配置することとする。 # ダウンロードして展開したフォルダの中に入っている、"platform-tools"を以下の様な形になるように配置する (base) PS C:\> ls platform-tools Directory: C:\platform-tools Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2025/01/11 0:20 5969000 adb.exe -a--- 2025/01/11 0:20 108136 AdbWinApi.dll -a--- 2025/01/11 0:20 73320 AdbWinUsbApi.dll -a--- 2025/01/11 0:20 451688 etc1tool.exe -a--- 2025/01/11 0:20 1874536 fastboot.exe -a--- 2025/01/11 0:20 54376 hprof-conv.exe -a--- 2025/01/11 0:20 242968 libwinpthread-1.dll -a--- 2025/01/11 0:20 479848 make_f2fs_casefold.exe -a--- 2025/01/11 0:20 479848 make_f2fs.exe -a--- 2025/01/11 0:20 1157 mke2fs.conf -a--- 2025/01/11 0:20 756840 mke2fs.exe -a--- 2025/01/11 0:20 1089833 NOTICE.txt -a--- 2025/01/11 0:20 38 source.properties -a--- 2025/01/11 0:20 2912360 sqlite3.exe 環境変数を設定する ...

January 10, 2025