11package com.example.scut_router
22
3+ import android.Manifest
34import android.content.Intent
5+ import android.content.pm.PackageManager
46import android.net.Uri
7+ import android.os.Build
58import android.os.Bundle
9+ import android.os.Environment
10+ import android.provider.Settings
11+ import android.widget.Toast
612import androidx.appcompat.app.AppCompatActivity
13+ import androidx.core.app.ActivityCompat
14+ import androidx.core.content.ContextCompat
715import com.example.scut_router.databinding.ActivityMainBinding
816
917class MainActivity : AppCompatActivity () {
1018
1119 private lateinit var binding: ActivityMainBinding
20+ val REQUEST_CODE : Int = 100
1221
1322 override fun onCreate (savedInstanceState : Bundle ? ) {
1423 super .onCreate(savedInstanceState)
1524
25+ requestPermissions() // 请求文件管理权限
26+
1627 binding = ActivityMainBinding .inflate(layoutInflater)
1728 setContentView(binding.root)
1829
@@ -62,13 +73,77 @@ class MainActivity : AppCompatActivity() {
6273 private external fun destroyLibSSHCommand ()
6374
6475 companion object {
65- private external fun initLibSSHCommand ()
76+ private external fun initLibSSHCommand (downloadPath : String )
6677 // Used to load the 'scut_router' library on application startup.
6778 init {
6879 System .loadLibrary(" scut_router" )
6980 // 初始化 SSH 库
70- initLibSSHCommand()
81+ val downloadPath : String = Environment .getExternalStoragePublicDirectory(Environment .DIRECTORY_DOWNLOADS ).absolutePath
82+ initLibSSHCommand(downloadPath)
7183 }
7284
7385 }
86+
87+ /* *
88+ * 请求文件读写权限
89+ */
90+ private fun requestPermissions () {
91+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .R ) {
92+ // Android 11 及更高版本,检查 MANAGE_EXTERNAL_STORAGE 权限
93+ if (Environment .isExternalStorageManager()) {
94+ // 权限已被授予,可以进行文件操作
95+ Toast .makeText(this , " 权限已成功获取,若首次授予请重启应用以正常运行" , Toast .LENGTH_SHORT ).show()
96+ } else {
97+ // 权限未被授予,提示用户去设置中开启
98+ val intent = Intent (Settings .ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION )
99+ val uri = Uri .fromParts(" package" , packageName, null )
100+ intent.data = uri
101+ startActivity(intent)
102+ }
103+ } else {
104+ // Android 10 及更低版本,检查 READ 和 WRITE 权限
105+ if (ContextCompat .checkSelfPermission(
106+ this ,
107+ Manifest .permission.READ_EXTERNAL_STORAGE
108+ ) != PackageManager .PERMISSION_GRANTED ||
109+ ContextCompat .checkSelfPermission(
110+ this ,
111+ Manifest .permission.WRITE_EXTERNAL_STORAGE
112+ ) != PackageManager .PERMISSION_GRANTED
113+ ) {
114+ ActivityCompat .requestPermissions(
115+ this , arrayOf<String >(
116+ Manifest .permission.READ_EXTERNAL_STORAGE ,
117+ Manifest .permission.WRITE_EXTERNAL_STORAGE
118+ ), REQUEST_CODE
119+ )
120+ }
121+ }
122+ }
123+
124+ override fun onRequestPermissionsResult (requestCode : Int ,
125+ permissions : Array <String >, grantResults : IntArray ) {
126+ super .onRequestPermissionsResult(requestCode, permissions, grantResults)
127+ when (requestCode) {
128+ REQUEST_CODE -> {
129+ // If request is cancelled, the result arrays are empty.
130+ if ((grantResults.isNotEmpty() &&
131+ grantResults[0 ] == PackageManager .PERMISSION_GRANTED )) {
132+ // Permission is granted. Continue the action or workflow
133+ // in your app.
134+ Toast .makeText(this , " 权限已成功获取,若首次授予请重启应用以正常运行" , Toast .LENGTH_SHORT ).show()
135+
136+ } else {
137+ Toast .makeText(this , " 权限被拒绝,无法正常工作,请重启" , Toast .LENGTH_SHORT ).show()
138+ }
139+ return
140+ }
141+
142+ // Add other 'when' lines to check for other
143+ // permissions this app might request.
144+ else -> {
145+ // Ignore all other requests.
146+ }
147+ }
148+ }
74149}
0 commit comments