11package com.example.scut_router
22
33import android.Manifest
4+ import android.app.AlertDialog
5+ import android.content.Context
46import android.content.Intent
57import android.content.pm.PackageManager
68import android.net.Uri
9+ import android.net.wifi.WifiManager
710import android.os.Build
811import android.os.Bundle
912import android.os.Environment
1013import android.provider.Settings
14+ import android.text.format.Formatter
1115import android.widget.Toast
1216import androidx.appcompat.app.AppCompatActivity
1317import androidx.core.app.ActivityCompat
@@ -17,18 +21,19 @@ import com.example.scut_router.databinding.ActivityMainBinding
1721class MainActivity : AppCompatActivity () {
1822
1923 private lateinit var binding: ActivityMainBinding
20- val REQUEST_CODE : Int = 100
24+ private val requestAccessFilePermission : Int = 100
2125
2226 override fun onCreate (savedInstanceState : Bundle ? ) {
2327 super .onCreate(savedInstanceState)
2428
2529 requestPermissions() // 请求文件管理权限
2630
31+ // 加载布局
2732 binding = ActivityMainBinding .inflate(layoutInflater)
2833 setContentView(binding.root)
2934
3035 // 为按钮设置点击事件
31- var intent : Intent
36+ var intent: Intent
3237 binding.imageButtonAccount.setOnClickListener() {
3338// Toast.makeText(this, "Account", Toast.LENGTH_SHORT).show()
3439 intent = Intent (this , LoginActivity ::class .java)
@@ -56,8 +61,55 @@ class MainActivity : AppCompatActivity() {
5661 startActivity(intent)
5762
5863 }
64+
65+ // 检查连接
66+ if (! checkIsValidConn()) {
67+ val alertBuilder = AlertDialog .Builder (this )
68+ alertBuilder.setTitle(getString(R .string.validConnTitle))
69+ alertBuilder.setMessage(getString(R .string.validConnMsg))
70+ alertBuilder.setPositiveButton(getString(R .string.validConnYes)) { _, _ ->
71+ finish()
72+ }
73+ alertBuilder.setNegativeButton(getString(R .string.validConnNo)) { dialog, _ ->
74+ dialog.dismiss()
75+ loadNativeLib()
76+ }
77+ alertBuilder.show()
78+ } else {
79+ loadNativeLib()
80+ }
5981 }
6082
83+ private fun loadNativeLib () {
84+ Toast .makeText(this , getString(R .string.loadCore), Toast .LENGTH_SHORT ).show()
85+ // 加载 Native 库
86+ System .loadLibrary(" scut_router" )
87+ // 初始化 SSH 库
88+ val downloadPath: String =
89+ Environment .getExternalStoragePublicDirectory(Environment .DIRECTORY_DOWNLOADS ).absolutePath
90+ initLibSSHCommand(downloadPath)
91+
92+ Toast .makeText(this , getString(R .string.core_loaded_successfully), Toast .LENGTH_SHORT ).show()
93+ }
94+
95+ private fun checkIsValidConn (): Boolean {
96+ // 检查是否正确连接路由器
97+ val context: Context = this
98+ val wifiManager = context.getSystemService(Context .WIFI_SERVICE ) as WifiManager
99+ val wifiInfo = wifiManager.connectionInfo
100+ val ipAddr = wifiInfo.ipAddress
101+
102+ val ipStr = Formatter .formatIpAddress(ipAddr)
103+ println (" IP 地址: $ipStr " )
104+
105+ if (ipStr != this .getString(R .string.default_router_conn)) {
106+ return false
107+ } else {
108+ return true
109+ }
110+ }
111+
112+
61113 override fun onDestroy () {
62114 super .onDestroy()
63115
@@ -72,17 +124,7 @@ class MainActivity : AppCompatActivity() {
72124
73125 private external fun destroyLibSSHCommand ()
74126
75- companion object {
76- private external fun initLibSSHCommand (downloadPath : String )
77- // Used to load the 'scut_router' library on application startup.
78- init {
79- System .loadLibrary(" scut_router" )
80- // 初始化 SSH 库
81- val downloadPath : String = Environment .getExternalStoragePublicDirectory(Environment .DIRECTORY_DOWNLOADS ).absolutePath
82- initLibSSHCommand(downloadPath)
83- }
84-
85- }
127+ private external fun initLibSSHCommand (downloadPath : String )
86128
87129 /* *
88130 * 请求文件读写权限
@@ -92,7 +134,11 @@ class MainActivity : AppCompatActivity() {
92134 // Android 11 及更高版本,检查 MANAGE_EXTERNAL_STORAGE 权限
93135 if (Environment .isExternalStorageManager()) {
94136 // 权限已被授予,可以进行文件操作
95- Toast .makeText(this , " 权限已成功获取,若首次授予请重启应用以正常运行" , Toast .LENGTH_SHORT ).show()
137+ Toast .makeText(
138+ this ,
139+ " 权限已成功获取,若首次授予请重启应用以正常运行" ,
140+ Toast .LENGTH_SHORT
141+ ).show()
96142 } else {
97143 // 权限未被授予,提示用户去设置中开启
98144 val intent = Intent (Settings .ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION )
@@ -115,26 +161,34 @@ class MainActivity : AppCompatActivity() {
115161 this , arrayOf<String >(
116162 Manifest .permission.READ_EXTERNAL_STORAGE ,
117163 Manifest .permission.WRITE_EXTERNAL_STORAGE
118- ), REQUEST_CODE
164+ ), requestAccessFilePermission
119165 )
120166 }
121167 }
122168 }
123169
124- override fun onRequestPermissionsResult (requestCode : Int ,
125- permissions : Array <String >, grantResults : IntArray ) {
170+ override fun onRequestPermissionsResult (
171+ requestCode : Int ,
172+ permissions : Array <String >, grantResults : IntArray
173+ ) {
126174 super .onRequestPermissionsResult(requestCode, permissions, grantResults)
127175 when (requestCode) {
128- REQUEST_CODE -> {
176+ requestAccessFilePermission -> {
129177 // If request is cancelled, the result arrays are empty.
130178 if ((grantResults.isNotEmpty() &&
131- grantResults[0 ] == PackageManager .PERMISSION_GRANTED )) {
179+ grantResults[0 ] == PackageManager .PERMISSION_GRANTED )
180+ ) {
132181 // Permission is granted. Continue the action or workflow
133182 // in your app.
134- Toast .makeText(this , " 权限已成功获取,若首次授予请重启应用以正常运行" , Toast .LENGTH_SHORT ).show()
183+ Toast .makeText(
184+ this ,
185+ " 权限已成功获取,若首次授予请重启应用以正常运行" ,
186+ Toast .LENGTH_SHORT
187+ ).show()
135188
136189 } else {
137- Toast .makeText(this , " 权限被拒绝,无法正常工作,请重启" , Toast .LENGTH_SHORT ).show()
190+ Toast .makeText(this , " 权限被拒绝,无法正常工作,请重启" , Toast .LENGTH_SHORT )
191+ .show()
138192 }
139193 return
140194 }
0 commit comments