最近、USB 開発用に Nexus 7 を購入しました。新しい Android OS が提供する USB Host 機能を使用したいと考えています。リンクで USB Host Tutorial に従っていました: http://developer.android.com/guide/topics/connectivity/usb/host.html。
私のプログラムは非常に単純で、コードの関連部分は次のとおりです。
private UsbManager manager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "in onCreate()");
manager = (UsbManager) getSystemService(Context.USB_SERVICE);
if(manager==null) {
Log.i(TAG, "USB Manager is NULL");
}
else {
Log.i(TAG, "USB Manager = " + manager);
}
}
public void enumerateUSBDevices() {
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Collection<UsbDevice> deviceCollection = deviceList.values();
Iterator<UsbDevice> deviceIterator = deviceCollection.iterator();
Log.i(TAG, "Number of connected USB Devices = " + deviceCollection.size());
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next();
Log.i(TAG, device.getDeviceName());
}
}
enumerateUSBDevices 関数が呼び出されると、接続されている USB デバイスの数 = 0 と報告されます。USB OTG ケーブルを使用していますが、USB マウスを接続したため、Nexus 7 が接続された USB デバイスに電力を供給していることがわかります。正常に動作します。また、別の Android スマートフォンを接続したところ、Nexus 7 がデバイスに電力を供給していることが確認されました。ただし、どちらの場合も、Android プログラムは USB デバイスが接続されていないと表示します。私のコードで何が間違っているのかわかりません。私の Android マニフェストには、次の行があります。
<uses-feature android:name="android.hardware.usb.host" />
私のマニフェストには、USB デバイスに関連付けられたインテント フィルタがありません。チュートリアルを読んだ私の理解では、アプリの実行後に USB デバイスが接続されたときにアプリに通知する場合にのみ、インテント フィルターをマニフェストに含める必要があります。
私が間違っているかもしれないことに誰かが光を当てることができますか? デバイスをルート化する必要がありますか?
ありがとう、