2013-04-11 62 views
9

私のノートブック(win7)とAndroidのAndroid携帯(Android 4.2)をUSBで接続しようとしています。 ノートブックは、アンドロイド携帯電話の電源にホストとして機能する必要があります。目標は、ノートブックと携帯電話がXML文字列を送受信できることです。Android(アクセサリーモード)とWindows PC(ホスト)とのUSB通信

アクセサリーモード(http://developer.android.com/guide/topics/connectivity/usb/accessory.html)を説明しているアンドロイドページに従いました。

  • 1:彼らはここで行ったよう は、私は、アクセサリフィルタを定義する必要があります:私はしたくないので、特別なハードウェアは

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

    を認識すること。私はすべての種類のWindowsコンピュータを認識したい(たとえば、私は別のPCに電話を差し込む)。

  • 2: 私は今Windows側で何もしていません。私はちょうど、アンドロイドのページをフォローし、USBケーブルに差し込んでログを見ました。アプリの起動は許可を求めますが、アクセサリはnullです。なぜそれがnullであるかのヒント? コード:

    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:私は、Windows側のUSB接続を識別するために使用できる任意のlibarys /プロジェクトがありますか?

  • 4:それ以上のことについて考えなければなりませんか?物事が間違っている?
  • 5:あなたの助けのためのTHX :)
+0

私は今#1がより明確であると思います。 Intentfilterは自動検出にのみ必要です – B770

答えて

-3

[OK]を、私は答えを自分で見つけ思います。 Android USBアクセサリモードは、アンドロイド携帯と、Androidを実行している別のデバイス(Arduinoなど)間でのみ可能です。 これはこの設定では不可能です。

+0

この回答は間違っています - ArduinoはAndroidを実行しておらず、USBホストはこれを行う必要はありません。しかし、USBアクセサリモードをサポートするために必要な特定の方法で話すことができる必要があります。 –

4

あなたはアクセサリモードに入るようにAndroidに依頼するホスト側のアプリケーション(あなたの場合はWindows)が必要です。それが尋ねられたら、許可を与えるかどうかのオプションが表示されます。アクセサリが接続されていないため、あなたはヌンアクセサリを持っています。それは通信を開始するためのAOAPに従っています。 したがって、Androidを実行していないアクセサリデバイスを使用して、AOAPを使用してデバイスと通信することは可能です。

Android側のサンプルは、Android SDKのサンプル(USBフォルダ)にあります。

+0

とどのようにソースアプリを達成することができますか? –

+2

アンドロイドからデータを受信するサンプルPC側は見つかりましたか? – badoualy

+0

@seed実際に私はそれを使用していません。一度それを使用し始めることができたので、私はそれに精通していましたが、それは延期され、それ以来それを扱っていません。しかし、プロトコルを知っていれば、それを理解するのは大したことではないはずです。 – helleye

関連する問題