How to Use Accessory Agent Service with D22 and Q3 Devices
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
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.
- Selection Mode
in Q3, default is slave, other devcies default is master mode.
- Usbchannel Switch
enable or disable the Accessory Connection Agent service