この記事を作った動機

 単に、ネットワークを使うだけで、パーミッション周りの設定と、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>

権限を許可したいときに確認すべきところ

非同期処理(とりあえず動くというだけ kotlin)

 本当のところは、AsyncTask は廃止なので java.util.concurrent を使うべきらしい。

参照すべきドキュメント

専用にクラスを定義する

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()
        }
    }
}

次の記事

参考にしたサイトとか