Android源码中修改USB默认模式(充电、MTP等)、关闭通知栏的USB通知

写了几年Android App,公司领导突然叫我在源码中修改USB连接后不能从PC端传数据到设备,这个之前没怎么接触过源码,咱也不知道,咱也不敢问呢,然后百度一搜,多倒是多,直接贴一大篇源码,得了吧,我能看懂那么多源码,我还搁这百度呢,好了开始我的小白学习之旅:

         首先要找到USB的连接,那肯定要找USB插拔的监听了,这个监听肯定要在系统启动的时候就要开始监听,好,第一步先到SystemServer看看呗(路径:frameworksbaseservicesjavacomandroidserverSystemServer.java),果然在这里找到了,UsbService,就是这个东西,开启了服务来监听USB

        既然都找到了USB监听,那咱也不能视而不见,直接进UsbService(路径:frameworksbaseservicesusbjavacomandroidserverusbUsbService.java)看看,我这里就不直接贴全部代码了,那么多代码贴出来也没啥用,我们直接找重点,找到了这个回调setCurrentFunction这个地方应该就是设置模式的地方了吧,因为我的功能是只能充电,不进行文件传输,所以我直接把模式改成了UsbManager.USB_FUNCTION_NONE,

function = UsbManager.USB_FUNCTION_NONE;

然后运行,哎,特么直接在PC端不显示盘符了,说明就是修改这里了,当然,如果需要其他默认模式也可以改,我这里是因为功能需要,直接暴力解决

 那么到这里,领导提出的功能就算解决了,不能进行文件传输,以为到这就结束了?我插上USB后,发现特么通知栏有USB的选择通知,点击还能弹出选择充电 和MTP的弹窗,fuck,虽然点击了不能修改模式(我直接暴力设置了只充电,所以点击其他没反应),但是作为一名优(low)秀(b)的程序员,一定要严谨,我们需要把通知栏的USB选择通知去掉,然后我跟着USBService的回调看,发现是调用了UsbDeviceManager的setCurrentFunctions方法,那就让我们走UsbDeviceManager(路径:frameworksbaseservicesusbjavacomandroidserverusbUsbDeviceManager.java)

        在UsbDeviceManager中的setCurrentFunctions方法中,我们看到显示判了空,然后handler发送了一个消息

 那么我们直接到处理消息的handleMessage看看呗

 咦,发现了什么,updateUsbNotification();方法,看名字,这应该就是更新USB通知栏,那我特么直接去掉,然后编译,果然,就是这个东西,通知栏已经没有了USB的通知,OJBK了,那我本次的任务的就完成了。

由于我刚接触系统层源码,可能还处于比较菜的地步,如果有错误的地方,麻烦大佬指点下,感谢感谢........

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>