How to Use Accessory Agent Service with D22 and Q3 Devices: Difference between revisions

From wizarPOS
Line 104: Line 104:
Please download and install to D22 and Q3.
Please download and install to D22 and Q3.


[http://ftp.wizarpos.com/advanceSDK/SetUsbAttrs.apk APK for enable or disable the Accessory Connection Agent service]
[http://ftp.wizarpos.com/advanceSDK/InitConnectionMode.apk Initialize Initialize APK]
* Selection Mode
in Q3, default is slave, other devcies default is master mode.
* Usbchannel Switch
enable or disable the Accessory Connection Agent service

Revision as of 02:44, 28 August 2023

Introduction

D22 can connect with Q3 via USB cable. The D22 works in master mode and the Q3 works in slave mode. By the helping of the AccessoryConnectionAgent apk, the application in two terminals can send Intent to any other application in another terminal.

User Manual

Accessory Connection Agent service user manual

AccessoryConnectionAgent Service APK

By default, the AccessoryConnectAgent is included in the D22 and Q3 FW. But it maybe not exists in the old FW, so the developer should install the agent by themselves. Here is the agent apk:

Accessory Connection Agent APK

Demo

Demo for APK developing. Demo

APK for testing, after install and run it, it will send intent through by the USB connection to the other device, to start the merchant self test apk

Sender snippet code:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        bindServer();
    }

    private void initView() {
        bindServerStatus = findViewById(R.id.bindServerStatus);
        startActivity = findViewById(R.id.startActivity);
        String json ="{\n" +
                "    \"action\": \"android.intent.action.MAIN\",\n" +
                "    \"className\": \"com.wizarpos.accessoryreceiveintentdemo.MainActivity\",\n" +
                "    \"flags\": 268435456,\n" +
                "    \"packageName\": \"com.wizarpos.accessoryreceiveintentdemo\",\n" +
                "    \"putExtra\": {\n" +
                "        \"extraData\": \"10\"\n" +
                "    }\n" +
                "}";
        startActivity.setOnClickListener(v -> {
            if(remoteServe != null){
                try {
                    remoteServe.remoteIntent(json);
                } catch (RemoteException e) {
                    throw new RuntimeException(e);
                }
            }else {
                Toast.makeText(this, "The AIDL service is disconnected", Toast.LENGTH_SHORT).show();
            }

        });
    }

    private void bindServer() {
        Intent intent = new Intent();
        ComponentName componentName =new ComponentName(INTENT_PACKAGE, INTENT_ACTION);
        intent.setComponent(componentName);
        bindService(intent, mServiceConnection, BIND_AUTO_CREATE);
    }
    ServiceConnection mServiceConnection = new ServiceConnection() {

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            remoteServe = IRemoteAccessoryApi.Stub.asInterface(service);
            bindServerStatus.setText("The AIDL service is Connected");
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            remoteServe = null;
            bindServerStatus.setText("The AIDL service is disconnected");
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(mServiceConnection);
    }

Receiver(com.wizarpos.accessoryreceiveintentdemo) snippet code:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Receive intent data
        String extraData = getIntent().getStringExtra("extraData");
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //Receive intent data
        String extraData = intent.getStringExtra("extraData");
    }

Init USB Connection Mode in Development

By default, the AccessoryConnectionAgent is disabled, the developer can use this apk to enable it.
For the production FW, the agent will be initialized before releasing from factory. Please download and install to D22 and Q3.

Initialize Initialize APK

  • Selection Mode

in Q3, default is slave, other devcies default is master mode.

  • Usbchannel Switch

enable or disable the Accessory Connection Agent service