首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android Usb Host 有关问题求教育(学费100分)

2013-07-21 
Android Usb Host 问题求教育(学费100分)本帖最后由 SEH_CRACKER 于 2013-07-04 11:31:55 编辑实现一个And

Android Usb Host 问题求教育(学费100分)
本帖最后由 SEH_CRACKER 于 2013-07-04 11:31:55 编辑 实现一个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  和我的一样

Android usb
[解决办法]
lz是由于调用了requestPermission方法后没有立即得到权限,但这时又去openDevice,所以报了权限错误,第二个网址中问题和解决方法已经说的蛮清楚的了
[解决办法]

引用:
lz是由于调用了requestPermission方法后没有立即得到权限,但这时又去openDevice,所以报了权限错误,第二个网址中问题和解决方法已经说的蛮清楚的了


这个我认为不应该是这样的,如果是这样的话那SDK中的例子,直接openDevice的,Android中是否有完成函数,求例子代码
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

lz是由于调用了requestPermission方法后没有立即得到权限,但这时又去openDevice,所以报了权限错误,第二个网址中问题和解决方法已经说的蛮清楚的了


这个我认为不应该是这样的,如果是这样的话那SDK中的例子,直接openDevice的,Android中是否有完成函数,求例子代码


是的sdk中的例子确实是直接openDevice的。

哪个例子啊?
这个权限应该普通app就能获得的吧
[解决办法]
SecurityException  看到这个东西了就知道是第三方软件的问题了

将apk  push到system/app下吧  或者将线程挂到systemproc下


[解决办法]
引用:
Quote: 引用:

SecurityException  看到这个东西了就知道是第三方软件的问题了

将apk  push到system/app下吧  或者将线程挂到systemproc下


怎么把现成挂到systemproc下 ,求方法 求例子


额  我没具体实现啊   只是之前遇到了类似需求,然后百度的  我们是做手机的  就直接push到system/app下了

可以参考系统的一些设计  类似android:shareid=media之类的

[解决办法]
看似是权限问题,但是你可能有android的权限,没有linux的权限,你放到system/app 下应该是可以的
[解决办法]
算了,你不用给我邮箱了,我直接写给你
放到文件夹ystem/etc/permissions下
文件名称:android.hardware.usb.host.xml
文件内容:
<permissions>
<feature name="android.hardware.usb.host"/>
</permissions>
重新编译

热点排行