实现一个Android Host 操作 Android phone的程序
代码是Android Sdk中的例子AdbTest
mApplicationContext = this.getApplicationContext();
if (mApplicationContext.getPackageManager().hasSystemFeature("android.hardware.usb.host")) {
Log.d("Shit", ">>>> FOUND !");
}
执行结果,输出 Shit >>>> FOUND,支持usb host
for (UsbDevice device : mManager.getDeviceList().values()) {
UsbInterface intf = findAdbInterface(device);
if (setAdbInterface(device, intf)) {
break;
}
}
获取到usb设备,但在setAdbInterface函数中有问题,
if(mManager.hasPermission(device) == true){
log("has access");
}else{
mManager.requestPermission(device, mPermissionIntent);
}
if (device != null && intf != null) {
UsbDeviceConnection connection = mManager.openDevice(device);
if (connection != null) {
log("open succeeded");
mManager.requestPermission(device, mPermissionIntent); //执行,后设备没有弹出窗口
UsbDeviceConnection connection = mManager.openDevice(device); //执行失败,报错
具体错误信息:
01-01 02:38:46.468: E/UsbManager(4043): exception in UsbManager.openDevice
01-01 02:38:46.468: E/UsbManager(4043): java.lang.SecurityException: User has not given permission to device UsbDevice[mName=/dev/bus/usb/001/003,mVendorId=1060,mProductId=60416,mClass=255,mSubclass=0,mProtocol=1,mInterfaces=[Landroid.hardware.usb.UsbInterface;@4146c080]
01-01 02:38:46.468: E/UsbManager(4043): at android.os.Parcel.readException(Parcel.java:1425)
01-01 02:38:46.468: E/UsbManager(4043): at android.os.Parcel.readException(Parcel.java:1379)
01-01 02:38:46.468: E/UsbManager(4043): at android.hardware.usb.IUsbManager$Stub$Proxy.openDevice(IUsbManager.java:340)
01-01 02:38:46.468: E/UsbManager(4043): at android.hardware.usb.UsbManager.openDevice(UsbManager.java:265)
01-01 02:38:46.468: E/UsbManager(4043): at com.example.scanvirus.MainActivity.setAdbInterface(MainActivity.java:159)
01-01 02:38:46.468: E/UsbManager(4043): at com.example.scanvirus.MainActivity.onCreate(MainActivity.java:89)
01-01 02:38:46.468: E/UsbManager(4043): at android.app.Activity.performCreate(Activity.java:5008)
01-01 02:38:46.468: E/UsbManager(4043): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-01 02:38:46.468: E/UsbManager(4043): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-01 02:38:46.468: E/UsbManager(4043): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-01 02:38:46.468: E/UsbManager(4043): at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-01 02:38:46.468: E/UsbManager(4043): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-01 02:38:46.468: E/UsbManager(4043): at android.os.Handler.dispatchMessage(Handler.java:99)
01-01 02:38:46.468: E/UsbManager(4043): at android.os.Looper.loop(Looper.java:137)
01-01 02:38:46.468: E/UsbManager(4043): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-01 02:38:46.468: E/UsbManager(4043): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 02:38:46.468: E/UsbManager(4043): at java.lang.reflect.Method.invoke(Method.java:511)
01-01 02:38:46.468: E/UsbManager(4043): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-01 02:38:46.468: E/UsbManager(4043): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-01 02:38:46.468: E/UsbManager(4043): at dalvik.system.NativeStart.main(Native Method)
昨天弄了一天,发现很多这样的错误:
http://www.w3c.com.cn/%E5%9C%A8%E6%89%93%E5%BC%80usb%E6%97%B6%E5%80%99%E5%87%BA%E7%8E%B0%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98%EF%BC%81%E4%B8%8D%E7%9F%A5%E5%88%B0%E6%80%8E%E4%B9%88%E8%A7%A3%E5%86%B3%EF%BC%81%E6%B1%82 和我的一样
http://stackoverflow.com/questions/10994848/android-usb-enumeration 和我的一样