Android 启用/禁用通过otg连接T卡功能
1.调用方法:
private String setSDOTGEnable(boolean enable) {if (enable)mDPM.clearUserRestriction(admin, UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA);elsemDPM.addUserRestriction(admin, UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA);
}
2.在【mt67xx_11.0】上调用以上方法并不能控制到ES文件浏览器识别SD卡,增加以下控制:
--- a/alps/frameworks/base/services/usb/java/com/android/server/usb/UsbHostManager.java
+++ b/alps/frameworks/base/services/usb/java/com/android/server/usb/UsbHostManager.java
@@ -50,6 +50,10 @@ import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.LinkedList;
+//add for setSDOTGEnable
+import android.os.UserHandle;
+import android.os.UserManager;
+//add end/*** UsbHostManager manages USB state in host mode.
@@ -353,6 +357,13 @@ public class UsbHostManager {@SuppressWarnings("unused")private boolean usbDeviceAdded(String deviceAddress, int deviceClass, int deviceSubclass,byte[] descriptors) {
+ //add by lfy for setSDOTGEnable
+ UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ boolean flag = um.hasUserRestriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,UserHandle.of(um.getUserHandle()));
+ if (flag) {
+ return false;
+ }
+ //add endif (DEBUG) {
以上方法实现的启用/禁用otg功能在使用过程中需要在调接口前先插拔otg设备,完善缺陷修改如下:
1.在禁用前先unmount已挂载的设备&在启用后mount已插入的设备,顺序不能乱
if(!enable){unmountSD(!enable); //禁用前先unmount已挂载的设备mDPM.addUserRestriction(admin, UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA);
}else{mDPM.clearUserRestriction(admin, UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA);unmountSD(!enable); //在启用后mount已插入的设备
}private void unmountSD(boolean disabled) {try { //一定要有try...catchandroid.util.Log.d("lfy","mountUnmountSD......");StorageManager mStorageManager = mContext.getSystemService(StorageManager.class);StorageVolume[] volumeList = mStorageManager.getVolumeList();if (volumeList.length > 0) {for (StorageVolume vol : volumeList) {android.util.Log.d(TAG," mountUnmountSD...vol="+vol+",getId="+vol.getId()+",path="+vol.getPath()+",InternalPath="+vol.getInternalPath()+",filePath="+vol.getPathFile().getPath()+",getDescription="+vol.getDescription(mContext));if (disabled) {if (!"/storage/emulated/0".equals(vol.getPath()) && "mounted".equals(vol.getState())) {mStorageManager.unmount(vol.getId());}}else{if (!"/storage/emulated/0".equals(vol.getPath()) && "unmounted".equals(vol.getState())) {mStorageManager.mount(vol.getId());}}}}} catch(Exception e){android.util.Log.d("lfy","[FuncTools] mountUnmountSD...e="+e);e.printStackTrace();}
}
2.打印log
3.如果unmountSD顺序调用错误(统一在enable判断前调用会报如下错误)
4.报错信息具体出处:
//frameworks/base/services/core/java/com/android/server/StorageManagerService.java
@Overridepublic void mount(String volId) {enforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);final VolumeInfo vol = findVolumeByIdOrThrow(volId);if (isMountDisallowed(vol)) { //决定存储是否能挂载的关键throw new SecurityException("Mounting " + volId + " restricted by policy");}mount(vol);}/*** Decide if volume is mountable per device policies.*/
private boolean isMountDisallowed(VolumeInfo vol) {UserManager userManager = mContext.getSystemService(UserManager.class);boolean isUsbRestricted = false;if (vol.disk != null && vol.disk.isUsb()) {isUsbRestricted = userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER,Binder.getCallingUserHandle());}boolean isTypeRestricted = false;if (vol.type == VolumeInfo.TYPE_PUBLIC || vol.type == VolumeInfo.TYPE_PRIVATE|| vol.type == VolumeInfo.TYPE_STUB) {isTypeRestricted = userManager.hasUserRestriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,Binder.getCallingUserHandle());}return isUsbRestricted || isTypeRestricted;
}
Android 启用/禁用通过otg连接T卡功能相关推荐
- Android 启用/禁用蓝牙传输文件功能(不能影响蓝牙耳机听歌)
修改记录[mt67xx_11.0] 1.启用/禁用蓝牙分享功能 private String setBtEnalbe(boolean enable) {if (enable)mDPM.clearUse ...
- Android baidu地图定位实现签到打卡功能(附源码)
导语 本章根据baidu地图API,实现打卡功能.用到了基础地图.覆盖物.定位图层.陀螺仪方法.悬浮信息弹框. (这里原创!!!转载请表明我的原文地址~) baidu地图API地址 :Android ...
- Android自定义实现按周签到打卡功能
之前实现过<Android可签到的日历控件>的功能,跟这篇一样都是实现签到打卡功能,这篇实现的是按月进行打卡做标识,本篇内容实现的按周进行签到打卡. 实现签到规则如下: 1.连续签到7天, ...
- Android 启用/禁用WLAN直连功能
修改记录[mt67xx_11.0] --- a/alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/s ...
- android 嵌套h5百度地图实现打卡功能
简介 项目过程中因需要做一个类似打卡的应用,先将之前写过的demo跟大家一起分享一下,主要是介绍如何使用android的webview嵌套H5实现简单的定位功能,H5页面设计html 以及javasc ...
- android otg连接单反
最近有个功能,otg连接单反,在github上找到了一个大神的代码,佳能相机使用是正常的,但是尼康一直有问题.nikoncheckcommond中一直检测不到拍照后addobject事件,有没有哪位大 ...
- Vmware提示:host usb device connections disabled-(vmware 主机已禁用 usb 设备连接)
Vmware提示:host usb device connections disabled-(vmware 主机已禁用 usb 设备连接) VMware Workstation,提示提示Host US ...
- win10 远程桌面卡顿_Win10系统远程桌面连接缓慢卡顿解决措施
远程桌面连接可以让我们更好的操控其他电脑,但是在使用过程中难免会遇到这样或那样的问题,而在win10系统中出现的问题也是层出不穷,有用户在win10下启用远程连接电脑窗口变得缓慢卡顿,出现这种现象主要 ...
- android 关闭jack_编译Android时禁用Jack Server
编译Android时禁用Jack Server 2017-07-24 15:29:43 +08 字数:818 标签: Android 本文的代码与方法,基于Android O(8.0). 简介 ¶ J ...
最新文章
- sqlplus set;命令
- python快速编程入门课后简答题答案-Python编程:从入门到实践(课后习题8)
- Tkinter Helloword !
- [.NET Core].NET Core R2安装及示例教程
- 使用jquery图表插件jqplot之折线图
- win7电脑上的文件打开方式选错了怎么办
- Android开发在路上:少去踩坑,多走捷径
- 上传身份证照片js_国际快递为什么需要上传身份证,怎么上传?
- 二. 音频系统 Audio Systems
- 关于Location of the Android SDK has not been setup in the preferences的解决方法
- Win7使用之查端口,杀进程
- 1Password 7:Mac的密码管理工具
- sap未分摊差异怎么处理_聊一聊,临时外包员工差异化薪酬要怎么处理
- 【Java】实现wav格式音乐的 播放、停止、循环播放、音量调节
- 怎么使用黑鲨U盘启动制作U盘系统?
- linux 版本号 笔记本_2019 年最佳 Linux 笔记本电脑发行版 top10
- docker 设备共享
- db2iupgrade失败:DBI1205E One or more local databases cannot be upgraded
- 大一Web课程设计 基于HTML家乡主题网页项目的设计与实现——中国牡丹之都山东菏泽(6页)
- cropper.js 裁剪图片并上传(文档翻译+demo)(转)
热门文章
- 少说话多写代码之Python学习017——字典的方法(items、pop)
- JAVA反色计算方法的改进和修正
- 假设一个类,继承了父类并且实现了一个接口,然后父类和接口有一个同名的方法,那么此时会发生什么情况,编译会提示出错吗?如果不出错,那么这到底算是重写还是实现接口方法?
- java中dao是什么意思
- 虚拟服务器 vmotion,VMotion简单步骤
- VS2017中英文切换设置
- org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. Nested
- 【JavaScript】DOM和事件简介和文档加载流程以及DOM查询(上)案例(附源码)
- html不同板块点击切换,板块快速切换的操作策略
- 乐讯机器人精简版2016迎春版【隆重发布】