7. Подключение к сервису МодульКассы
Anastasia Koreshkova edited this page Oct 9, 2023
·
2 revisions
- Перед подключением к сервису приложению необходимо предоставить требуемые разрешения:
- "ru.modulkassa.pos.permission.PRINT_CHECK" - для печати чеков;
- "ru.modulkassa.pos.permission.KKT_INFO" - для получения данных о ККТ.
Для этого требуемые разрешения нужно объявить в манифесте (AndroidManifest.xml):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.modulkassa.pos.integrationtest">
<uses-permission android:name="ru.modulkassa.pos.permission.KKT_INFO"/>
<uses-permission android:name="ru.modulkassa.pos.permission.PRINT_CHECK"/>
<application ...>
...
</application>
</manifest>
- Также требуемые разрешения должны быть запрошены непосредственно перед подключением к сервису. Более подробно о запросе разрешения можно почитать тут - Request App Permissions.
if (ContextCompat.checkSelfPermission(this, "ru.modulkassa.pos.permission.KKT_INFO")
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
arrayOf("ru.modulkassa.pos.permission.KKT_INFO"),
PERMISSION_REQUEST)
} else {
connectToService()
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
when (requestCode) {
PERMISSION_REQUEST -> {
// If request is cancelled, the result arrays are empty.
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
connectToService()
} else {
Toast.makeText(this, "Разрешение было отклонено пользователем",
Toast.LENGTH_LONG).show()
finish()
}
return
}
else -> {
// Ignore all other requests.
}
}
}
- После того, как разрешения были получены, можно подключаться к сервису:
private var modulkassa: IModulKassa? = null
private val connection = object : ServiceConnection {
override fun onServiceDisconnected(name: ComponentName?) {
modulkassa = null
}
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
modulkassa = IModulKassa.Stub.asInterface(service)
}
}
private fun connectToService() {
val serviceIntent = ModulKassaServiceIntent()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(serviceIntent)
} else {
startService(serviceIntent)
}
bindService(serviceIntent, connection, Context.BIND_AUTO_CREATE)
}
Внимание! Приложение должно само следить за соединением (подключение/отключение/переподключение) с сервисом печати МодульКассы.