Skip to content

7. Подключение к сервису МодульКассы

Anastasia Koreshkova edited this page Oct 9, 2023 · 2 revisions
  1. Перед подключением к сервису приложению необходимо предоставить требуемые разрешения:
  • "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>
  1. Также требуемые разрешения должны быть запрошены непосредственно перед подключением к сервису. Более подробно о запросе разрешения можно почитать тут - 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.
            }
        }
    }
  1. После того, как разрешения были получены, можно подключаться к сервису:
    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)
    }

Внимание! Приложение должно само следить за соединением (подключение/отключение/переподключение) с сервисом печати МодульКассы.