2013-04-11 26 views
9

Provo a stabilire una connessione USB tra il mio notebook (win7) e il mio telefono Android (Android 4.2). Il notebook dovrebbe funzionare come host per alimentare il telefono Android. L'obiettivo è che notebook e telefono possano inviare e ricevere stringhe xmlComunicazione USB tra Android (modalità accessorio) e PC Windows (host)

Ho provato a seguire la pagina di Android che spiega la modalità accessorio (http://developer.android.com/guide/topics/connectivity/usb/accessory.html).

  • 1: devo definire un filtro accessorio come hanno fatto qui:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    <usb-accessory model="DemoKit" manufacturer="Google" version="1.0"/> 
    </resources> 
    

    Perché io non voglio un hardware speciale per essere riconosciuto. Voglio che tutti i tipi di computer Windows vengano riconosciuti (ad esempio, collego il telefono a un altro pc).

  • 2: Non ho fatto nulla sul lato Windows in questo momento. Ho appena seguito la pagina di Android, collegato il cavo USB e guardato il registro. L'avvio dell'app chiede l'autorizzazione, ma l'accessorio è nullo. Qualche suggerimento perché è nullo? Codice:

    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: Ci sono libarys/progetti che posso utilizzare per identificare la connessione USB sul lato di Windows?

  • 4: Altre cose a cui dovrei pensare? Cose che non vanno?
  • 5: thx per il vostro aiuto :)
+0

Quindi immagino che il # 1 sia più chiaro ora. Intentfilter è necessario solo per il rilevamento automatico – B770

risposta

-3

Ok, credo che mi sono trovato la risposta. La modalità accessorio Android USB è possibile solo tra un telefono Android e un altro dispositivo su cui è in esecuzione Android (come Arduino). Quindi questo non è possibile con questa impostazione.

+0

Questa risposta non è corretta: un Arduino non esegue Android e non è necessario che l'host USB lo faccia. Tuttavia, deve essere in grado di parlare nei modi specifici richiesti per supportare la modalità accessorio USB. –

4

Dovresti avere un'applicazione sul lato host (Windows nel tuo caso) che chiederà ad Android di accedere alla modalità accessorio. Quando ti chiede, ti verrà presentata l'opzione di dare il permesso o meno. Hai un accessorio nullo perché non è collegato alcun accessorio, che ha seguito l'AOAP per avviare una comunicazione. Quindi è possibile avere un dispositivo accessorio, che non stia girando su Android e che comunichi con esso usando AOAP.

È possibile trovare un esempio per il lato Android negli esempi dal proprio SDK Android, nella cartella USB.

+0

e come si può ottenere un'app di origine? –

+2

Hai trovato campioni per PC per ricevere dati da Android? – badoualy

+0

@seed In realtà non l'ho usato. Una volta è stato possibile iniziare a usarlo, quindi ho preso familiarità con esso, tuttavia è stato rinviato e non ho affrontato da allora. Comunque penso che non dovrebbe essere un grosso problema capirlo, una volta che conosci il protocollo. – helleye

Problemi correlati