@@ -7,11 +7,9 @@ import android.os.Build
77import android.os.Bundle
88import android.view.View
99import android.widget.Toast
10- import androidx.annotation.RequiresApi
1110import androidx.appcompat.app.AlertDialog
1211import androidx.appcompat.app.AppCompatActivity
1312import androidx.core.view.ViewCompat
14- import androidx.core.view.WindowCompat
1513import androidx.core.view.WindowInsetsCompat
1614import androidx.core.view.updatePadding
1715import com.starmicronics.stariodevicesetting.StarIODeviceSettingException
@@ -26,7 +24,7 @@ class MainActivity : AppCompatActivity() {
2624 private val scope = CoroutineScope (Dispatchers .Default + job)
2725
2826 companion object {
29- private const val BLUETOOTH_REQUEST_CODE = 1000
27+ private const val PERMISSIONS_REQUEST_CODE = 1000
3028 }
3129
3230 private lateinit var binding: ActivityMainBinding
@@ -81,12 +79,14 @@ class MainActivity : AppCompatActivity() {
8179 }
8280 }
8381
84- // If you are using Android 12 and targetSdkVersion is 31 or later,
82+ // If you are using Android 12 or later and targetSdkVersion is 31 or later,
8583 // you have to request Bluetooth permission (Nearby devices permission) to use the Bluetooth printer.
8684 // https://developer.android.com/about/versions/12/features/bluetooth-permissions
87- if (Build .VERSION_CODES .S <= Build .VERSION .SDK_INT ) {
88- requestBluetoothPermission()
89- }
85+
86+ // If you are using Android 17 or later and target SdkVersion is 37 or later,
87+ // you have to request ACCESS_LOCAL_NETWORK permission to use the LAN printer.
88+ // https://developer.android.com/privacy-and-security/local-network-permission
89+ requestRuntimePermissions()
9090 }
9191
9292 private suspend fun showResultDialog (message : String? ) {
@@ -112,18 +112,29 @@ class MainActivity : AppCompatActivity() {
112112 return versionName
113113 }
114114
115- @RequiresApi(31 )
116- private fun requestBluetoothPermission () {
117- if (baseContext.checkSelfPermission(Manifest .permission.BLUETOOTH_CONNECT ) == PackageManager .PERMISSION_DENIED ||
118- baseContext.checkSelfPermission(Manifest .permission.BLUETOOTH_SCAN ) == PackageManager .PERMISSION_DENIED
119- ) {
120- requestPermissions(
121- arrayOf(
122- Manifest .permission.BLUETOOTH_CONNECT ,
123- Manifest .permission.BLUETOOTH_SCAN
124- ),
125- BLUETOOTH_REQUEST_CODE
126- )
115+ private fun requestRuntimePermissions () {
116+ val permissions = mutableListOf<String >()
117+
118+ // Android 12 or later : Bluetooth
119+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .S ) {
120+ if (applicationContext.checkSelfPermission(Manifest .permission.BLUETOOTH_CONNECT ) == PackageManager .PERMISSION_DENIED ) {
121+ permissions.add(Manifest .permission.BLUETOOTH_CONNECT )
122+ }
123+
124+ if (applicationContext.checkSelfPermission(Manifest .permission.BLUETOOTH_SCAN ) == PackageManager .PERMISSION_DENIED ) {
125+ permissions.add(Manifest .permission.BLUETOOTH_SCAN )
126+ }
127+ }
128+
129+ // Android 17 or later : LAN
130+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .CINNAMON_BUN ) {
131+ if (applicationContext.checkSelfPermission(Manifest .permission.ACCESS_LOCAL_NETWORK ) == PackageManager .PERMISSION_DENIED ) {
132+ permissions.add(Manifest .permission.ACCESS_LOCAL_NETWORK )
133+ }
134+ }
135+
136+ if (permissions.isNotEmpty()) {
137+ requestPermissions(permissions.toTypedArray(), PERMISSIONS_REQUEST_CODE )
127138 }
128139 }
129140
@@ -133,11 +144,18 @@ class MainActivity : AppCompatActivity() {
133144 grantResults : IntArray
134145 ) {
135146 super .onRequestPermissionsResult(requestCode, permissions, grantResults)
136- if (requestCode == BLUETOOTH_REQUEST_CODE ) {
137- if (grantResults.size == 2 && grantResults[0 ] == PackageManager .PERMISSION_GRANTED && grantResults[1 ] == PackageManager .PERMISSION_GRANTED ) {
138- // Bluetooth permissions are granted.
139- } else {
140- val text = " You have to allow \" Nearby devices\" to use the Bluetooth printer"
147+ if (requestCode == PERMISSIONS_REQUEST_CODE ) {
148+ var allGranted = true
149+
150+ for (result in grantResults) {
151+ if (result != PackageManager .PERMISSION_GRANTED ) {
152+ allGranted = false
153+ break
154+ }
155+ }
156+
157+ if (! allGranted) {
158+ val text = " You have to check permissions to use the LAN / Bluetooth printer"
141159 Toast .makeText(baseContext, text, Toast .LENGTH_LONG ).show()
142160 }
143161 }
0 commit comments