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

Seh_Cracker 2013-07-04 11:07:38
实现一个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 和我的一样
...全文
878 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgengen 2014-06-16
  • 打赏
  • 举报
回复
楼主不厚道。
zzdwuliang 2014-06-07
  • 打赏
  • 举报
回复
引用 32 楼 SEH_CRACKER 的回复:
已经搞定结贴散分,感谢各位热心帮助虽然说没起作用哈哈。
这么多人帮着你搞,你搞定了却又不分享下,楼主
  • 打赏
  • 举报
回复
您好,我现在也出现了这问题,请问你是怎么解决的
vampire_3 2013-12-10
  • 打赏
  • 举报
回复
怎么解决的?能留个qq吗?多谢
LT_F 2013-08-02
  • 打赏
  • 举报
回复
最近也在搞这个,但读写不成功,楼主做好了可以给我一份Demo吗,312081300@qq.com谢谢
ydybati 2013-07-26
  • 打赏
  • 举报
回复
楼主,请问怎么搞的?我也是这里connection出问题。。。
Seh_Cracker 2013-07-15
  • 打赏
  • 举报
回复
引用 30 楼 f839903061 的回复:
算了,你不用给我邮箱了,我直接写给你 放到文件夹ystem/etc/permissions下 文件名称:android.hardware.usb.host.xml 文件内容: <permissions> <feature name="android.hardware.usb.host"/> </permissions> 重新编译
这个我也加了,我也能获取到设备,在检测权限,获取权限, openDevice这里报错的。
	        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");
                }
流程这样走的, 无权限, 获取权限,openDevce 然后失败,然后报错。
雨焰 2013-07-15
  • 打赏
  • 举报
回复
算了,你不用给我邮箱了,我直接写给你 放到文件夹ystem/etc/permissions下 文件名称:android.hardware.usb.host.xml 文件内容: <permissions> <feature name="android.hardware.usb.host"/> </permissions> 重新编译
雨焰 2013-07-15
  • 打赏
  • 举报
回复
不知道我的这个文件,你能不能用,因为这个是我自己添加的,为的是能够获取usb设备的信息! 你要的话,邮箱留下,我到时候发给你!
Seh_Cracker 2013-07-15
  • 打赏
  • 举报
回复
引用 25 楼 lieri111 的回复:
看似是权限问题,但是你可能有android的权限,没有linux的权限,你放到system/app 下应该是可以的
哦,我还没试,放到这个目录下怎么源码调试?
Seh_Cracker 2013-07-15
  • 打赏
  • 举报
回复
引用 26 楼 f839903061 的回复:
缺少权限!你的应该是system/etc/permission/文件夹下少了一个xml权限文件
能具体点吗?缺少哪个文件
Seh_Cracker 2013-07-15
  • 打赏
  • 举报
回复
已经搞定结贴散分,感谢各位热心帮助虽然说没起作用哈哈。
雨焰 2013-07-12
  • 打赏
  • 举报
回复
缺少权限!你的应该是system/etc/permission/文件夹下少了一个xml权限文件
passself 2013-07-11
  • 打赏
  • 举报
回复
看似是权限问题,但是你可能有android的权限,没有linux的权限,你放到system/app 下应该是可以的
荒颜 2013-07-11
  • 打赏
  • 举报
回复
引用 22 楼 SEH_CRACKER 的回复:
[quote=引用 20 楼 tanwei4199 的回复:] SecurityException 看到这个东西了就知道是第三方软件的问题了 将apk push到system/app下吧 或者将线程挂到systemproc下
怎么把现成挂到systemproc下 ,求方法 求例子[/quote] 试试这个吧 不行我是没办法了 我们都是直接编译rom的image的 android:sharedUserId="android.uid.system"
荒颜 2013-07-11
  • 打赏
  • 举报
回复
引用 22 楼 SEH_CRACKER 的回复:
[quote=引用 20 楼 tanwei4199 的回复:] SecurityException 看到这个东西了就知道是第三方软件的问题了 将apk push到system/app下吧 或者将线程挂到systemproc下
怎么把现成挂到systemproc下 ,求方法 求例子[/quote] 额 我没具体实现啊 只是之前遇到了类似需求,然后百度的 我们是做手机的 就直接push到system/app下了 可以参考系统的一些设计 类似android:shareid=media之类的
Seh_Cracker 2013-07-10
  • 打赏
  • 举报
回复
引用 20 楼 tanwei4199 的回复:
SecurityException 看到这个东西了就知道是第三方软件的问题了 将apk push到system/app下吧 或者将线程挂到systemproc下
怎么把现成挂到systemproc下 ,求方法 求例子
Seh_Cracker 2013-07-10
  • 打赏
  • 举报
回复
引用 19 楼 shen332401890 的回复:
http://stackoverflow.com/questions/10994848/android-usb-enumeration 哥们这里有个解释 不知道是否是你想要的 mManager.requestPermission(device, mPermissionIntent); 这句没有达到你想要的效果,为异步,所以下面没有权限。 做个延迟试试看 ,直到获取权限的说 参考帖子 http://www.eoeandroid.com/thread-228679-1-1.html
跟这个关系不大,因为我直接调试的是系统的例子所以。。。
荒颜 2013-07-09
  • 打赏
  • 举报
回复
SecurityException 看到这个东西了就知道是第三方软件的问题了 将apk push到system/app下吧 或者将线程挂到systemproc下
顾小林 2013-07-09
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/10994848/android-usb-enumeration 哥们这里有个解释 不知道是否是你想要的 mManager.requestPermission(device, mPermissionIntent); 这句没有达到你想要的效果,为异步,所以下面没有权限。 做个延迟试试看 ,直到获取权限的说 参考帖子 http://www.eoeandroid.com/thread-228679-1-1.html
加载更多回复(18)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧