この記事を作った動機
単に、ネットワークを使うだけで、パーミッション周りの設定と、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()
}
}
}
次の記事
参考にしたサイトとか
- 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日)