USB communication between Android (accessory mode) and Windows PC (host)
You should have an application on the host side (Windows in your case) that will ask the Android to enter accessory mode. When it asks, you will be presented with the option to give permission or not. You have null accessory because there is no accessory connected, that has followed the AOAP to initiate a communication. So it is possible to have accessory device, that is not running Android and to communicate with it using AOAP.
You can find an example for the Android side in the samples from your android SDK, in USB folder.
B770
Updated on June 19, 2022Comments
-
B770 almost 2 years
I try to make an USB connection between my notebook (win7) and my android phone (Android 4.2). The notebook should act as host to power the android phone. The goal is that notebook and phone can send and receive xml strings
I tried to follow the the android page that explains accessory mode (http://developer.android.com/guide/topics/connectivity/usb/accessory.html).
-
1: Must I define a accessory filter like they did here:
<?xml version="1.0" encoding="utf-8"?> <resources> <usb-accessory model="DemoKit" manufacturer="Google" version="1.0"/> </resources>
Because I don't want a special hardware to be recognized. I want all kind of windows computers to be recognized (e.g. I plug the phone in another pc).
-
2: I've done nothing on the windows side right now. I just followd the android page, pluged in the usb cable and watched the log. The app startet asks for permission, but the accessory is null. Any hints why it is null? Code:
public class MainActivity extends Activity { private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private static final String TAG = "USB_PERMISSION"; UsbAccessory accessory; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); registerReceiver(mUsbReceiver, filter); accessory = (UsbAccessory) getIntent().getParcelableExtra( UsbManager.EXTRA_ACCESSORY); manager.requestPermission(accessory, mPermissionIntent); } private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { String manufacturer; Log.d(TAG, "permission accepted for accessory " + accessory); if (accessory != null) { manufacturer = accessory.getManufacturer(); Log.d(TAG, "Manufacturer: " + manufacturer); } } else { Log.d(TAG, "permission denied for accessory "+ accessory); } } } } }; }
3: Are there any libarys/projects I can use to identify the USB connection on the Windows side?
- 4: Any further things I should think about? Things that are wrong?
- 5: thx for your help :)
-
-
Chris Stratton about 10 yearsThis answer is incorrect - an Arduino does not run Android, and there is no need for the USB host to do so. However, it does need to be able to talk in the specific ways required to support the USB accessory mode.
-
Naveed Ali over 9 yearsand how can it be achieved any source app?
-
badoualy about 9 yearsDid you find any sample pc-side to receive data from android ?
-
dragi about 9 years@seed Actually I haven't used it. Once it was possible to start using it, so I got familiar with it, however it was deferred and I have not dealt with it since then. However I think that it should not be a big deal to figure it out, once you know the protocol.
-
Calvin about 8 years@helleye you mean my app in android phone can actual respond to windows over USB? I had similar requirement earlier and i used adb in windows to communicate with my app and my app used to create text files on a predefined path from where my windows app would read file.
-
dragi about 8 years@Calvin Yes, this is what the accessory mode is about. You should follow the AOA protocol and you can start by reading source.android.com/devices/accessories/protocol.html
-
Chetan Joshi over 2 years@Calvin Could you please send me any reference for ADB communication which you done?
-
Ron about 2 yearsCould you share what you've done to get it to work for reference? Thanks.