Android 安全卸载U盘的方法
这今天项目中有一个将设备的数据文件复制到U盘的功能,复制完成之后,在设备看U盘的文件都是好的,数据也正常,当拔出U盘后放到电脑上,有时就会出现文件为0B的情况,后来才发现,是U盘没有安全卸载的原因。
初期的设想是控制程序跳转到android的设置的存储界面,让用户进行点击U盘的安全卸载选项,代码如下:
Intent intent = new Intent(Settings.ACTION_MEMORY_CARD_SETTINGS);
startActivity(intent);
很简单粗暴,直接跳转界面。
But,问题来了,系统的界面和当前设备的UI风格不统一。这就是个很让人挠头的问题了,只能自己实现U盘卸载的功能了。
网上查了好多的资料,感觉没有自己想要的功能,无奈之下,给硬件组要了一份当前系统的Setting的源码,请教了一圈,最后确定了存储功能的源码位置:
在这个文件夹下的Memory.java这个文件中,下面来看看U盘卸载功能是如何实现的,直接上源码:
private void doUnmount() {// Present a toast hereToast.makeText(getActivity(), unmoutUSBorSD.equals("usb")?R.string.custom_usb_unmount_inform_text:R.string.custom_sd_unmount_inform_text, Toast.LENGTH_SHORT).show();IMountService mountService = getMountService();try {sLastClickedMountToggle.setEnabled(false);sLastClickedMountToggle.setTitle(getString(R.string.sd_ejecting_title));sLastClickedMountToggle.setSummary(getString(R.string.sd_ejecting_summary));mountService.unmountVolume(sClickedMountPoint, true, false);} catch (RemoteException e) {// Informative dialog to user that unmount failed.showDialogInner(DLG_ERROR_UNMOUNT);}}
关键点就两句 IMountService mountService = getMountService();和mountService.unmountVolume(sClickedMountPoint, true, false); ,其余的和U盘卸载基本没有关系,下面来看 getMountService()方法:
private synchronized IMountService getMountService() {if (mMountService == null) {IBinder service = ServiceManager.getService("mount");if (service != null) {mMountService = IMountService.Stub.asInterface(service);} else {Log.e(TAG, "Can't get mount service");}}return mMountService;}
只是获取了系统的一个服务,那么unmountVolume(sClickedMountPoint, true, false);中的sClickedMountPoint又是啥呢?
接着找,如下:
final StorageVolume volume = category.getStorageVolume();if (volume != null && category.mountToggleClicked(preference)) {sLastClickedMountToggle = preference;sClickedMountPoint = volume.getPath();String state = mStorageManager.getVolumeState(volume.getPath());if (volume.getPath().contains("usb")){unmoutUSBorSD = "usb";}else{unmoutUSBorSD = "sd";}if (Environment.MEDIA_MOUNTED.equals(state) ||Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {unmount();} else {mount();}return true;}
可以确定是U盘的挂载路径,OK到这里,基本U盘的卸载方法已经明了,如果使用系统的服务或方法的话,采用反射机制是一个不错的方式,过程不在进行说明,增加如下文件
文件下载地址: https://download.csdn.net/download/u011685953/10992318
使用方法如下:
//安全卸载U盘public void doUnMountU() {IMountService service = IMountService.Stub.asInterface(ServiceManager.getService("mount"));try {service.unmountVolume(App_DataPara.getApp().GetExternalStorageDirectory(), true, false);} catch (RemoteException e) {e.printStackTrace();}}
App_DataPara.getApp().GetExternalStorageDirectory()为需要卸载的U盘的挂载的文件目录。String类型
因为踩过坑,所以记录一下,同时分享出来,哪怕对一个人有帮助也行!
Android 安全卸载U盘的方法相关推荐
- android usb卸载不了,Android 安全卸载U盘的方法
这今天项目中有一个将设备的数据文件复制到U盘的功能,复制完成之后,在设备看U盘的文件都是好的,数据也正常,当拔出U盘后放到电脑上,有时就会出现文件为0B的情况,后来才发现,是U盘没有安全卸载的原因. ...
- Android studio占用C盘资源的解决方法
Android studio占用C盘资源的解决方法 Android Studio安装成功后会在系统盘用户目录下产生这几个文件夹 一.目录介绍 1..android 是Android SDK生成的AVD ...
- VMware虚拟机挂载/卸载U盘的两种方法
闲话短述(仅记录个人学习原由): 还是在测试装机U盘时遇到的问题,怎么让虚拟机挂载U盘,并且作为启动盘安装系统. 方法一: 挂载U盘: 将U盘插入电脑,并且识别到插入,打开指定虚拟机,点击编辑虚拟机设 ...
- Android盒子看百度云,【沙发管家】智能电视和电视盒子如何使用百度网盘的方法!看你想看的片子!...
原标题:[沙发管家]智能电视和电视盒子如何使用百度网盘的方法!看你想看的片子! 很多小伙伴把重要的视频资料放到了百度网盘里,想在智能电视或者电视盒子上观看.不过百度网盘没有TV版本很是纠结,不过小伙伴 ...
- rufus linux开机密码,使用Rufus 3.4制作Ubuntu 18.04.1 U盘启动盘的方法
本文介绍使用Rufus 3.4版本来制作Ubuntu 18.04.1 U盘启动盘的方法,一共需要八个步骤即可完成. 简介 Rufus是一个开源免费的快速制作U盘系统启动盘和格式化USB的实用小工具,它 ...
- Android PopupWindow 隐藏软键盘的方法
今天,简单讲讲android里 PopupWindow 弹出在底部,被软键盘遮挡的问题. 之前,自己写一个PopupWindow 弹出在底部,可是如果软键盘显示时弹出,软键盘会遮挡PopupWi ...
- 研华电脑510上电自启_研华工控机怎么设置u盘启动_研华工控机U盘引导方法
描述 本文主要介绍的是研华工控机,首先介绍了研华工控机怎么设置u盘启动,其次阐述了研华工控机U盘引导方法,具体的步骤教程跟随小编一起来了解一下. 研华工控机怎么设置u盘启动 研华IPC-610 工控机 ...
- linux php7 yum 卸载,Linux_在Centos中yum安装和卸载软件的使用方法,安装一个软件时
yum -y install h - phpStudy...
在Centos中yum安装和卸载软件的使用方法 安装一个软件时 yum -y install httpd 安装多个相类似的软件时 yum -y install httpd* 安装多个非类似软件时 yu ...
- dos从优盘启动计算机,DOS启动版U盘制作方法(usbboot)
下载后把USBBOOT程序解压缩出来,再把你的U盘插上,按照下面的步骤就可以把你的U盘制作成DOS启动型的(注意事先备份U盘中有用的数据) ①选中你的U盘: ②点击蓝色的字选择工作模式: ③强烈建议选 ...
最新文章
- 入门级Mat (java版)
- 科研实习 | 北京大学计算机学院杨智老师组招收系统方向科研实习生
- web.xml 中的listener、 filter、servlet 加载顺序
- html5 职工入职后台管理系统_ChemCMS是一款基于GO+PHP+MYSQL+HTML5构建的化学内容管理系统
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
- 95-290-040-源码-内存管理-MemorySegment
- 读书:梭罗的《瓦尔登湖》
- Mysql之左连接右连接内连接——示例
- Shaolin(map||set)
- 《幸福来敲门》观后感
- 计算机编程考试题库和答案,计算机程序设计员试题及答案
- 38 全志平台的script.bin在linux内核里的应用分析
- Android 渲染机制——SurfaceFlinger
- idea社区版的安装和安装中文插件
- 当电脑80端口被占用怎么办
- mac m1 office卸载重装(学校官方正版)
- PE文件结构图解,比较牵强,仅为学习笔记,高手见笑
- 火狐浏览器 如何设置成 打开一个新的页面,原有的页面继续存在
- 2022国赛高教杯数学建模A题B题(预测)
- beanstalkd 安装 入门
热门文章
- DBA Scripts
- 我的2019“木桶插曲”——三个月考上研
- PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)
- Windows安装mysql,亲测有效
- python-分分钟入门-基础语法
- 为什么开直通车后搜索上不来?手淘压制搜索如何解决?
- 微信小程序radio单选框如何修改宽高及选中样式
- 外行学计算机,《新手无忧学电脑:外行入门学电脑(2008至尊经典版)》低价购书_计算机与互联网_孔网...
- eclipse解决js提示
- Codeforce Round #764 div3