アプリケーションを開発しており、タブレットの USB ホスト モードを使用してデバイスを管理する必要があります。
この時点では、デバイスの接続時に USB のみを有効にすることができました。プロセスステップ:
- アプリの起動、デバイスの接続はありません。
- Android から、アプリケーションを起動しないかどうか尋ねられる
- 同意
すると、アプリケーションが起動し、USB 接続が使用できるようになりました。
しかし、それは私がやりたいことではありません:
- タブレットをオフにして、デバイスを接続します
- タブレットの電源を入れる
- アプリケーションを手動で起動する
- デバイスとの USB 接続を初期化します。
実際には、接続を確立するには、タブレットの USB を手動で接続解除/接続する必要がありますが、私の場合、デバイスは既にタブレットに接続されているため、接続を解除せずに接続を初期化する必要があります。 /USBを再接続します。
ブロードキャスト レシーバーについて説明している USB ホスト接続ページで Google が提供する例を試しましたが、うまくいかないか、よくわかりません。
私の質問は:
既に接続されている USB ホスト デバイスへの接続を開く方法はありますか?
魔女のやり方で、このダムの解決策を見つけるために検索する必要があります:D
ここで、私の問題を理解するのに役立つコードが既に実装されています:
manifest.xml :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="..."
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="13" />
<application
android:allowBackup="true"
android:icon="@drawable/..."
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
<activity
android:name="...Activity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
ファイル res/xml/device_filter.xml :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-device vendor-id="5455" product-id="8238" />
</resources>
次に、私の Activity の onResume() :
@Override
protected void onResume() {
super.onResume();
Intent intent = getIntent();
String action = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
UsbManager usbManager = (UsbManager) activity.getSystemService(Context.USB_SERVICE);
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
}
}
そして最後に、接続を可能にする私の方法:
protected void open(Object o) throws DeviceException {
if (device != null && device.getVendorId() == 5455 && device.getProductId() == 8238) {
int nbEndPoint = 0;
for (int i = 0; i < device.getInterfaceCount(); i++) {
UsbInterface usbInterface = device.getInterface(i);
for (int j = 0; j < usbInterface.getEndpointCount(); j++) {
UsbEndpoint usbEndPoint = usbInterface.getEndpoint(j);
nbEndPoint++;
switch (nbEndPoint) {
case 1:
this.pipeWriteData = usbEndPoint;
case 2:
this.pipeReadCommandResult = usbEndPoint;
case 3:
this.pipeReadAutoStatus = usbEndPoint;
case 4:
this.pipeReadImageData = usbEndPoint;
}
}
}
usbConnection = manager.openDevice(device);
if (usbConnection == null || !usbConnection.claimInterface(device.getInterface(0), true)) {
usbConnection = null;
throw new DeviceException(DeviceException.UNKNOW_ERROR);
}
}
}