精华内容
下载资源
问答
  • Android通过U盘更新程序 https://blog.csdn.net/qq_31939617/article/details/80749448
  • 很多人都会遇到奇怪的一个问题,就是u盘文件删不掉, 一刷新就回来了,这是什么原因呢,其实这是U盘的弊端,它由于是基于闪存存储,所以会出错的时候,那么我们用下面的几个方法就能解决它。方法一、确保你的U盘...

    很多人都会遇到奇怪的一个问题,就是u盘文件删不掉, 一刷新就回来了,这是什么原因呢,其实这是U盘的弊端,它由于是基于闪存存储,所以会出错的时候,那么我们用下面的几个方法就能解决它。

    6ad8da42b57d68e8f13c6130a62b0547.png

    方法一、确保你的U盘是不是中毒了,使用360安全卫士或者qq管家就能轻易解决,这是第一个尝试。

    方法二、看看你U盘里的文件是不是被设置为只读了,只需要点击你U盘里的文件然后鼠标右键,选择属性,然后去掉复选框只读的勾选,点击确定。

    73325521a9335902619ebdf36f5f9882.png

    方法三、如果不是只读问题,只是体现在删除后刷新又回来了,那么用本方法。

    1、U盘插到电脑上,打开我的电脑,选择U盘盘符,点击鼠标右键,在弹出的菜单里选择“属性”。

    2、然后会弹出属性窗口,我们点击“工具”选项,然后如下图这样点击“开始检查”。

    8d5dc71402c48d09429e2e3b61ed3394.png

    3、然后会弹出新窗口,我们在“检查磁盘”页面中,勾选自动修复和扫描并恢复两个选项,并点击“开始”进行扫描。

    403be7bcf9ec5e528b4ca0435509e7be.png

    4、等扫描修复完成后,我们再看看U盘里的文件是否可以删除成功了。

    方法四、如果上面不成功,我们可以通过删除命令将文件删除:

    点击桌面空白处,鼠标右键-然后新建-文本文档-在文档里写入下列命令:

    DEL /F /A /Q \?%1  RD /S /Q \?%1

    a50957481f1ac3f3d8eb5c9c9324b7a4.png

    接着另存为“删除文件.bat”,接着将U盘里的要删除的文件或者目录拖放到这个bat文件的图标上就可以删除了。

    方法五、如果还是不行的话,那么我们将u盘进行格式化操作,注意此操作U盘里的所有文件会被删除。

    1、首选使用系统自带的格式化功能,就是鼠标点击U盘盘符,右键点了再点格式化,然后勾选快速格式化,点开始,等待格式化成功,如下图。

    e349f8b8cc2cc04e61dc157192de1241.png

    2、如果格式化不成功,我们可以用第三方格式化工具来彻底删除U盘里的文件

    推荐Kingston Format Utility、 u盘强制格式化工具两个工具,它们都是U盘厂家出品的修复类软件,当然本站U盘网还有很多U盘修复工具都是强制格式化类软件,大家可以多试试总有一款可以解决。

    此类软件的特点就是一键修复,速度非常快,数秒就可以把U盘完整的格式化了,而且格式化后U盘里的文件就真的删除了,不会再出现之前的问题。

    aac40b721230e25e1fa2755a42738801.png

    方法六、U盘量产工具来解决

    这是终极方法了,因为U盘里的文件怎么也删除不了,很有可能是U盘闪存逻辑错误,而上面5个方法都不能解决的话,说明已经处于比较深层次的错误,所以必须用量产工具才可以解决,虽然量产工具功能强大,但由于操作相对麻烦需要参考对应的量产教程,所以很多人不会,但如果你有心的话,多看看教程也不是什么难事,也不需要其他工具,只需要一台电脑。

    f1e3fe1c70676ee7aa7072c97a560c95.png

    这里只说下具体的操作步骤:先用芯片精灵检测U盘是什么主控,记录下来,然后按主控名称在量产网找量产工具和教程,比如主控是慧荣的sm3259aa,那么直接用sm3259aa站内搜索量产工具即可,一般用最新的版本,然后按教程量产修复你的U盘就行了。

    总结:以上六个方法总有一个能彻底解决U盘文件删不掉的问题,而且是根治的方法,大家多多动手就OK了,只要有恒心,这个问题还是很好解决的,当然不管是U盘格式化还是U盘量产都会删除U盘里的所有文件,所以注意备份有用的文件后再操作。

    展开全文
  • android读取u盘api

    2020-12-19 20:25:04
    位置,删除后新建分区时,起始位置需要与原分区一致,否则重启会异常。执行以下命令,进行扩容操作,根据提示选择对应选项。fdisk - u /dev/vda系统显示类似如下,保存分区信息时,会出现警告信息,由于系统 盘分区...

    {"optioninfo":{"dynamic":"true","static":"true"},"simplifiedDisplay":"newSimpleInfoCard","newCard":[],"card":[],"search":[],"infoCard":[{"bannerTitle":"移动研发平台 EMAS,爆款产品0元试用","bannerContent":"一站式研发平台快速搭建移动应用,包括HTTPDNS、移动推送、移动热修复、

    移动测试、移动监控等,打造移动应用全周期服务能力","liveButtonName":"立即开通","liveButtonLink":"https://common-buy.aliyun.com/?commodityCode=emas_establish#/open","homePageName":"最新活动","homePageLink":"https://www.aliyun.com/activity/emas/emas_promotion","contentTitle":"爆款产品资源包","linkGroup":[{"linkTo":"立即抢购","linkContent":"

    HTTPDNS:域名防劫持、调度精准、实时生效。>","link":"https://common-buy.aliyun.com/?commodityCode=httpdnsbag#/buy"},{"linkContent":"

    移动热修复:快速修复、安全稳定、极简接入","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?commodityCode=hotfix_device_bag#/buy"},{"linkContent":"

    移动监控:崩溃分析、性能分析、远程日志","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?commodityCode=emas_appmonitor_bag#/buy"},{"linkContent":"

    移动推送:到达率高、延迟低、稳定性高、基础设施强。","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?commodityCode=cpsbag#/buy"}],"bannerUrl":"https://img.alicdn.com/tfs/TB19T8lRhv1gK0jSZFFXXb0sXXa-1740-328.jpg"}],"title":{"mainTitle":"","subtitle":"","linkUrl":"","btnText":""},"visual":{"topbg":"https://img.alicdn.com/tfs/TB1EJ1xJkL0gK0jSZFxXXXWHVXa-1740-328.jpg","icon":"","textColor":"dark"},"dataList":[],"sceneCard":[],"txt":[{"title":"适用场景","scenariosone":[]}]}

    {"$env":{"JSON":{}},"$page":{"env":"production"},"$context":{"optioninfo":{"dynamic":"true","static":"true"},"simplifiedDisplay":"newSimpleInfoCard","newCard":[],"card":[],"search":[],"infoCard":[{"bannerTitle":"移动研发平台 EMAS,爆款产品0元试用","bannerContent":"一站式研发平台快速搭建移动应用,包括HTTPDNS、移动推送、移动热修复、

    移动测试、移动监控等,打造移动应用全周期服务能力","liveButtonName":"立即开通","liveButtonLink":"https://common-buy.aliyun.com/?commodityCode=emas_establish#/open","homePageName":"最新活动","homePageLink":"https://www.aliyun.com/activity/emas/emas_promotion","contentTitle":"爆款产品资源包","linkGroup":[{"linkTo":"立即抢购","linkContent":"

    HTTPDNS:域名防劫持、调度精准、实时生效。>","link":"https://common-buy.aliyun.com/?commodityCode=httpdnsbag#/buy"},{"linkContent":"

    移动热修复:快速修复、安全稳定、极简接入","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?commodityCode=hotfix_device_bag#/buy"},{"linkContent":"

    移动监控:崩溃分析、性能分析、远程日志","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?commodityCode=emas_appmonitor_bag#/buy"},{"linkContent":"

    移动推送:到达率高、延迟低、稳定性高、基础设施强。","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?commodityCode=cpsbag#/buy"}],"bannerUrl":"https://img.alicdn.com/tfs/TB19T8lRhv1gK0jSZFFXXb0sXXa-1740-328.jpg"}],"title":{"mainTitle":"","subtitle":"","linkUrl":"","btnText":""},"visual":{"topbg":"https://img.alicdn.com/tfs/TB1EJ1xJkL0gK0jSZFxXXXWHVXa-1740-328.jpg","icon":"","textColor":"dark"},"dataList":[],"sceneCard":[],"txt":[{"title":"适用场景","scenariosone":[]}]}}

    移动研发平台 EMAS,爆款产品0元试用

    一站式研发平台快速搭建移动应用,包括HTTPDNS、移动推送、移动热修复、

    移动测试、移动监控等,打造移动应用全周期服务能力

    爆款产品资源包

    HTTPDNS:域名防劫持、调度精准、实时生效。>

    移动热修复:快速修复、安全稳定、极简接入

    移动监控:崩溃分析、性能分析、远程日志

    移动推送:到达率高、延迟低、稳定性高、基础设施强。

    文件

    读取漏洞官方评级高危漏洞描述由于FFmpeg可处理HLS播放列表,而播放列表中可包含外部文件的援引。恶意攻击者可以利用精心构造的avi文件中的GAB2字幕块,上传构造的avi视频到使用FFmpeg的目标站点,进而通过XBIN codec获取到 ...

    问题描述在修改/etc/profile文件后执行source /etc/profile命令时出现以下报错。

    读取文件"/etc/profile"时发生错误问题原因PATH环境变量之间没有冒号(:)分隔导致报错。解决方案阿里 ...

    来自:

    帮助

    建个炫酷的简历网页,制作一个浪漫的表白网页,打造个人专属网盘,多种动手场景应用免费学!!!

    广告

    本文以Windows系统,Flink 1.10版本为例,为您介绍如何使用Flink全托管作业

    读取DataHub数据写入HBase ...

    概览File

    API for StandardMode版本信息版本 : 2.0.0URI scheme域名 : .

    api.aliyunpds.com基础路径 : /v2协议 : HTTP, HTTPS请求Content-Type ...

    本文档为EMAS

    Android SDK快速集成手册。一、 APP 工程准备新建或者使用已有的

    Android工程。在接入前,确保工程能编译通过,顺利运行后,再开始接入, 避免增加不必要的麻烦。二、 集成准备EMAS包括以下SDK能力,可选择性接入 ...

    概览Account

    API版本信息版本 : 2.0.0URI scheme域名 : .auth.aliyunpds.com基础路径 : /v2协议 : HTTP, HTTPS请求Content-Typeapplication/json返回 ...

    调用

    API RebootInstance,才可以看到云

    盘容量扩展。在实例操作系统里重启无效 ...

    Secret信息? 如何查看更新后的SQL是否生效? 如何查看维表

    读取数据的进度? 如何切换系统版本 ...

    。 实例必须经过控制台重启实例或者调用

    API RebootInstance,才可以看到云

    盘容量扩展。在实例操作系统里重启无效 ...

    1. 概述本文主要介绍在专有云环境中,AliFlash

    盘挂载超时的解决方法。方案总览类别内容风险等级(方案执行的影响)低操作方式黑屏操作复杂度低预估执行时长15分钟客户业务的影响无可监控性不 ...

    来自:

    帮助

    。 ESSD云

    盘的

    API取值为cloud_essd,提供了四个性能级别的云

    盘规格,四种性能级别核心差异在于单

    盘性能上限的不同 ...

    概览File

    API for SelfHostedMode版本信息版本 : 2.0.0URI scheme域名 : .

    api.aliyunpds.com基础路径 : /v2协议 : HTTP, HTTPS请求Content-Type ...

    概览用户操作

    API,适用于标准模式和托管模式。版本信息版本 : 2.0.0URI scheme域名 : .

    api.aliyunpds.com基础路径 : /v2协议 : HTTP, HTTPS请求Content-Type ...

    概览Image

    API版本信息版本 : 2.0.0URI scheme域名 : .

    api.aliyunpds.com基础路径 : /v2协议 : HTTP, HTTPS请求Content-Typeapplication/json返回 ...

    本文档介绍如何基于PDS搭建一个拥有已有用户体系的云

    盘系统。云

    盘系统将使用已有的用户登录界面,适用于已有用户体系的应用对接。1. 准备工作开通网

    盘与相册服务。如果没有开通,请到产品详情页面开通。产品授权。第一次登录控制台: https://pds ...

    网提供的Basic UI域的资源,需要通过 App 来访问。您可以自己创建 App,自己开发(调用PDS提供的

    API)来访问域的资源, 也可以使用官方提供的 App 直接访问。BasicUI 是我们官方提供的开箱即用的云

    盘web界面(App),支持基本 ...

    具备iOS/

    Android/Java三种SDK的自动生成能力,并且具备

    API调用文档自动生成能力; 4.

    API网关支持入参混排能力,请求中的参数可以映射到后端请求中的任何位置; 5.

    API网关提供参数清洗能力,用户定义

    API的时候可以指定参数的类型,正则等 ...

    本文提供了如何使用growpart和resize2fs等工具完成Linux系统

    盘扩展分区和文件系统的操作指导 ...

    位置,删除后新建分区时,起始位置需要与原分区一致,否则重启会异常。执行以下命令,进行扩容操作,根据提示选择对应选项。fdisk -

    u /dev/vda系统显示类似如下,保存分区信息时,会出现警告信息,由于系统

    盘分区是busy状态,重新

    读取分区表会失败 ...

    来自:

    帮助

    盘的过程中,在线升级性能级别。如果要降低性能级别,只支持降低按量付费ESSD云

    盘的性能级别。您也可以调用

    API ModifyDiskSpec修改ESSD云

    盘的性能级别。修改后,性能级别立即生效,您无需创建新

    盘或者迁移数据 ...

    OAuth

    API.概览OAuth

    API.版本信息版本 : 2.0.0URI scheme域名 : $.auth.aliyunpds.com 协议 : HTTPS 基础路径 : /v2

    APIGET /v2/oauth ...

    ,ECS实例不会变更所宿物理机。本文步骤仅适用于发生了本地盘实例系统事件的ECS实例,介绍了如何使用阿里云CLI调用ECS

    API隔离损坏的本地盘。您也可以更新SDK或者在阿里云

    API Explorer中调用相关

    API完成 ...

    API CopyImage,指定一个KMSKeyId来加密系统

    盘。 aliyun ecs CopyImage --RegionId cn-hongkong \--ImageId ...

    通过已有的登录页面。服务端使用 “自定义应用JWT接入”(近期提供) 签发 AccessToken。云

    盘应用界面拿到 AccessToken 后,通过AccessToken 访问 CCP的业务

    API。方式二:使用官方 ...

    Kubernetes Secret密钥。本文主要介绍如何使用阿里云密钥管理服务(KMS)中管理的密钥对ACK Pro集群中的Kubernetes Secret密钥数据进行落

    盘加密 ...

    盘扩容场景介绍数据

    盘扩容新增数据

    盘数据

    盘扩容" class="reference-link">版本管理版本修订日期变更类型生效日期1.02019/3/261.12019 ...

    当数据

    盘的计费方式为按量付费时,您可以从ECS实例上卸载数据

    盘。阿里云ECS不支持卸载作为数据

    盘使用的本地盘 ...

    阿里云ECS支持卸载系统

    盘。当文件损坏无法启动ECS实例时,您可以卸载系统

    盘后作为数据

    盘挂载到其他ECS实例进行修复,修复完毕后再作为 ...

    本文描述如何在ECS控制台上重新初始化一块系统

    盘。重新初始化后,系统

    盘会恢复到创建时的状态 ...

    购买数据

    盘当前轻量应用服务器支持在新购时购买数据

    盘,具体步骤:打开轻量应用服务器产品页面,点击“购买”选择地域,镜像和套餐类型后,套餐下方有存储的滚动条,可根据自身轻量选择具体大小:购买完毕结算订单即可。查看数据

    盘购买数据

    盘 ...

    如果云

    盘当前的计费方式不满足您的需求,您可以转换计费方式。挂载在包年包月实例上的数据

    盘可以单独转换计费方式,实例系统

    盘以及按量付费实例 ...

    展开全文
  • //appPath为app要删除文件的路径 try { initialize(volumeName); prescan(path, true ); File file = new File(path); if ( ! file . exists()) { //[BUGFIX]-Add-BEGIN by test,07/10/2018,delete ...

    app通过MediaScannerConnection通知Scanner新增文件时会调用scanSingleFile函数,对其修改如下:

     // this function is used to scan a single file
        public Uri scanSingleFile(String path, String volumeName, String mimeType, String appPath) {//appPath为app要删除文件的路径
            try {
                initialize(volumeName);
                prescan(path, true);
    
                File file = new File(path);
                if (!file.exists()) {
                    //[BUGFIX]-Add-BEGIN by test,07/10/2018,delete media file for app,
                    int nCount = -1;
                    int fileType = -1;
                    /*/mnt/media_rw/udisk/,/storage/udisk/*/
                    //Log.i(TAG, "path: " + path);
                    //Log.i(TAG, "appPath: " + appPath);
                    MediaFile.MediaFileType mediaFileType = MediaFile.getFileType(path);
                    if (mediaFileType != null) {
                        fileType = mediaFileType.fileType;
                        //Log.i(TAG, "fileType: " + fileType);
                    }
    
                    if(fileType == -1){
                        Log.e(TAG, "get filetype failed, return");
                        return null;
                    }
                    nCount = removeMediaFromLib(mContext, appPath, fileType);//test add 20180709,delete items from db
                    Log.i(TAG, "scanSingleFile file is not exists, delete item count: " + nCount);
                    //[BUGFIX]-Add-END by test
    
                    return null;
                }
    }
     //[BUGFIX]-Add-BEGIN by test,07/10/2018,delete media file for app
        private int removeImageFromLib (Context context, String filePath) {
            int count = -1;
            try{
                count = mMediaProvider.delete(mPackageName, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                    MediaStore.Images.Media.DATA + "=?", new String[]{filePath});
            }catch(RemoteException e){
                Log.i(TAG, "RemoteException: " + e);
            }finally{
                return count;
            }
        }
    
        private int removeAudioFromLib (Context context, String filePath) {
            int count = -1;
            try{
                count = mMediaProvider.delete(mPackageName, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                  MediaStore.Audio.Media.DATA + "=?", new String[] {filePath});
            }catch(RemoteException e){
                Log.i(TAG, "RemoteException: " + e);
            }finally{
                return count;
            }
        }
    
        private int removeVideoFromLib (Context context, String filePath) {
            int count = -1;
            try{
                count = mMediaProvider.delete(mPackageName, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                  MediaStore.Video.Media.DATA + "=?", new String[] {filePath});
            }catch(RemoteException e){
                Log.i(TAG, "RemoteException: " + e);
            }finally{
                return count;
            }
        }
    
        private int removeMediaFromLib(Context context, String filePath, int fileType) {
            int affectedRows = -1;
    
            boolean isaudio = MediaFile.isAudioFileType(fileType);
            boolean isvideo = MediaFile.isVideoFileType(fileType);
            boolean isimage = MediaFile.isImageFileType(fileType);
            Log.i(TAG, "isaudio: " + isaudio);
            Log.i(TAG, "isvideo : " + isvideo);
            Log.i(TAG, "isimage : " + isimage);
    
            if (isimage) {
               affectedRows = removeImageFromLib(context, filePath);
               Log.i(TAG, "removeImageFromLib count: " + affectedRows);
            } else if (isaudio) {
               affectedRows = removeAudioFromLib(context ,filePath);
               Log.i(TAG, "removeAudioFromLib count: " + affectedRows);
            } else if (isvideo) {
               affectedRows = removeVideoFromLib(context, filePath);
               Log.i(TAG, "removeVideoFromLib count: " + affectedRows);
            }
    
            return affectedRows;
        }
        //[BUGFIX]-Add-END by test

    MediaScanner扫描流程参考:https://blog.csdn.net/q1183345443/article/details/80257028

    展开全文
  • Android OTG 读写U盘文件

    万次阅读 热门讨论 2020-05-04 18:04:51
    最近项目需要做一个关于OTG的功能,其实也就使用到U盘的文件读取,一般这种需求是不需要的,因为大部分的系统都会自动挂载U盘,但是个别系统还是需要自己去实现,查了很多资料都没有找到一个完整的能用的例子,要么...

    最近项目需要做一个关于OTG的功能,其实也就使用到U盘的文件读取,一般这种需求是不需要的,因为大部分的系统都会自动挂载U盘,但是个别系统还是需要自己去实现,查了很多资料都没有找到一个完整的能用的例子,要么就是年代偏远,好不容易运行起来跑不了,或者没效果,这个过程是很烦的,google了一下后,发现了一个开源的文件管理器,但是该管理器在使用的时候却出现了OTG无法读取的问题,详细的话可以自己去看看 https://github.com/1hakr/AnExplorer,我是去看源码它的USB实现过程中从中提取了一部分东西,再结合看的其他博客,总算能实现读写的效果。
    阅读之前,可先看一下这几篇文章了解一些概念:

    android-USB-OTG 外部设备通讯 USB插拔检测

    Android实战技巧之四十九:Usb通信之USB Host

    https://developer.android.com/guide/topics/connectivity/usb/host.html

        好吧,其实看了也只是有个大概的了解,要想实现其实还是差了点,特别是获取U盘目录什么的简直不知道该怎么下手,废话不多说,看一下个人实现,如果你有更好的实现,欢迎留言讨论。

        首先,肯定需要获取读取OTG和文件权限,在manifest.xml中加入以下权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.hardware.usb.host" android:required="false" />

        然后,部分手机上是没有otg的所以需要加入特性。

     <uses-feature android:name="android.hardware.usb.host" android:required="true" /> 

        有了权限后,就可以开始编码了。

        第一步,注册广播,监听otg插拔事件。

    //监听otg插入 拔出
    IntentFilter usbDeviceStateFilter = new IntentFilter();
    usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
    usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
    //注册监听自定义广播
    IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
    registerReceiver(mUsbReceiver, filter);

        ACTION_USB_PERMISSION是定义的一个权限字段

    private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";

        接上

        //otg插入 拔出广播
        getActivity().registerReceiver(mUsbReceiver, usbDeviceStateFilter);//这里我用的碎片
        registerReceiver(mUsbReceiver, usbDeviceStateFilter);//这里我用的碎片
        //mUsbReceiver只是一个普通的广播,根据action,去分别处理对应的事件。
        private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                switch (action) {
                    case ACTION_USB_PERMISSION://接受到自定义广播
                        synchronized (this) {
                            UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                            if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { //允许权限申请
                                if (usbDevice != null) {
                                    //Do something
                                }
                            } else {
                                TShow("用户未授权,读取失败");
                            }
                        }
                        break;
                    case UsbManager.ACTION_USB_DEVICE_ATTACHED://接收到存储设备插入广播
                        UsbDevice device_add = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                        if (device_add != null) {
                            TShow("接收到存储设备插入广播");
                        }
                        break;
                    case UsbManager.ACTION_USB_DEVICE_DETACHED://接收到存储设备拔出广播
                        UsbDevice device_remove = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                        if (device_remove != null) {
                            TShow("接收到存储设备拔出广播");
                            //拔出或者碎片 Activity销毁时 释放引用
                            //device.close();
                        }
                        break;
                }
            }
        };

        TShow()是我个人的Toast消息封装,上述中的广播每一个都可以获取到usb设备的实体信息类,可以根据个人逻辑处理。

        第二步,枚举设备

            //获取管理者
            UsbManager usbManager = (UsbManager) getContext().getSystemService(Context.USB_SERVICE);
            //枚举设备
            UsbMassStorageDevice[] storageDevices = UsbMassStorageDevice.getMassStorageDevices(getContext());//获取存储设备
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent(ACTION_USB_PERMISSION), 0);
            for (UsbMassStorageDevice device : storageDevices) {//可能有几个 一般只有一个 因为大部分手机只有1个otg插口
                if (usbManager.hasPermission(device.getUsbDevice())) {//有就直接读取设备是否有权限
                    read(device);
                } else {//没有就去发起意图申请
                    usbManager.requestPermission(device.getUsbDevice(), pendingIntent); //该代码执行后,系统弹出一个对话框,
                }
            }

        申请意图执行后,会进入上面的广播中,然后,在需要处理的地方去执行读取操作。

        第三步,读取U盘信息

        这里需要说明一下,UsbMassStorageDevice这个类来自开源库,里面包含了一些获取大容量存储设备的操作和其他封装。可以在Gradle中加入依赖:

            compile 'com.github.mjdev:libaums:+'

    该库GitHub地址:https://github.com/magnusja/libaums#using-buffered-streams-for-more-efficency

        read(device);的详细代码:

    private void read(UsbMassStorageDevice massDevice) {
                // before interacting with a device you need to call init()!
                try {
                    massDevice.init();//初始化
                    //Only uses the first partition on the device
                    Partition partition = massDevice.getPartitions().get(0);
                    FileSystem currentFs = partition.getFileSystem();
                    //fileSystem.getVolumeLabel()可以获取到设备的标识
                    //通过FileSystem可以获取当前U盘的一些存储信息,包括剩余空间大小,容量等等
                    Log.d(TAG, "Capacity: " + currentFs.getCapacity());
                    Log.d(TAG, "Occupied Space: " + currentFs.getOccupiedSpace());
                    Log.d(TAG, "Free Space: " + currentFs.getFreeSpace());
                    Log.d(TAG, "Chunk size: " + currentFs.getChunkSize());
                    UsbFile root = currentFs.getRootDirectory();
                } catch (Exception e) {
                    e.printStackTrace();
                    TShow("读取失败");
                }
        }

        到这里就已经可以获取到U盘根目录的实体类UsbFile了 

        UsbFile的部分函数:

    listFiles();//该函数可以获取到某个目录下所有的文件
    
    boolean isDirectory();//判断是否是目录
    
    void setName(String newName) throws IOException//给目录或文件设置名称
    
    String getName();//获取该文件或目录的名称
    
    UsbFile getParent();//该函数可以获取父类对象,比如根目录是root,它有个子目录music,那么通过music的UsbFile对象可以获取到root的文件和目录列表,也就解决了获取上一级目录文件的问题。    
    
    long getLength();//如果是个文件,可以获取到文件大小
    
    void read(long offset, ByteBuffer destination) throws IOException;//文件读取操作
    
    void write(long offset, ByteBuffer source) throws IOException;文件写入操作
    
    UsbFile createDirectory(String name) throws IOException;//如果是个目录,那么会在该目录下创建一个新的目录
    
    UsbFile createFile(String name) throws IOException;//如果该目录存在,会在该目录下生成一个新的文件
    
    void delete() throws IOException;//文件和目录删除操作
    
    boolean isRoot();//当前目录是否是根目录

        常用的函数就这几个,基本上包括了U盘文件的增删改查,如果说需要一个File的对象,那么可以通过流的形式进行先保存到本地再获取。因为File对象指向了一个具体的uri地址,也就是说,必须要有能访问的具体路径,比如内置存储和sd卡的目录。

        具体步骤:先创建一个具体的文件,然后以io形式进行文件写入,相当于复制,io完成后即可获取File对象

        如下:       

     new Thread(new Runnable() {
                  @Override
                  public void run() {
                      try {
                          FileOutputStream os = new FileOutputStream(tempFile);
                          InputStream is = new UsbFileInputStream(usbFile);
                          int bytesRead = 0;
                          byte[] buffer = new byte[1024 * 8];//作者的推荐写法是currentFs.getChunkSize()为buffer长度
                          while ((bytesRead = is.read(buffer)) != -1) {
                              os.write(buffer, 0, bytesRead);
                          }
                          os.flush();
                          os.close();
                          is.close();
                          //Do something
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                  }
    
              }).start();

        好了,基本上整个流程就是这样的,由于百度账户注销了,所以源码没了,但是只要看懂了这个流程基本上就没什么问题了。

    展开全文
  • android中读写文件的需求地方很多,其中就包括了识别U盘,弹出U盘,读写U盘的文件等。那么,如何实现这些需求呢?笔者简单的说下:1.识别U盘:识别U盘的方法只要是用到了2个android官方类。它们分别为:...
  • android手动挂载U盘导出数据

    千次阅读 2021-12-08 11:50:18
    项目开发过程中, 有导出excel文件到u盘的需求, 但是使用的android5.1系统u盘没有挂载, 导致数据无法导出。 解决方式如下: <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools...
  • Android USB(OTG) 删除文件的探索过程

    千次阅读 2019-06-11 11:50:27
    package ... import android.Manifest; import android.app.PendingIntent; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; import an...
  • android删除文件权限

    2021-05-27 04:01:16
    android文件存储有几种方式,SD卡,system,data。今天要谈的删除文件是指删除SD卡和data下面的文件,system有待后续再整理。整个过程包括创建文件,设置属性,删除文件,权限。以下都是java代码:创建文件:String ...
  • 删除外置U盘文件

    2016-10-25 16:28:57
    之前试过各种办法,加了很多权限都无法删除外置的U盘中的文件,后面加了一句话,完美解决:  只需要在中添加一句话就可以:  android:sharedUserId="android.uid.system"  ok!
  • android 监听u盘插拔

    千次阅读 2019-09-17 17:02:17
    android 5.1 下 u盘插拔 /** * 用于监听android 5.1 的u盘插拔 */ public class USBdiskReceiver51 extends BroadcastReceiver { private static final String TAG = "USBdiskReceiver51"; @Override public...
  • ​ 想要在sd卡或U盘的跟目录修改、创建、删除文件等操作。 ​ 在XML文件中申请权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name=...
  • 工作中遇到一个问题,音乐播放器可以播放U盘里面的歌曲,但是无法删除(删除不会报错,但只是从播放列表中删掉了,发现U盘里面的文件还在)。怀疑是权限的问题。查看U盘的挂载目录发现:root@android:/ # ls -l /mnt/...
  • android添加了读取外部存储的权限但是不能删除SD卡上的内容; 在中添加:android:sharedUserId="android.uid.system" 但这时就不能使用网线或usb仿真了,使用jar签名则可;
  • 以前程序在android 5.0上运行没有问题,安装到7.1.2上不能读写U盘了,一番百度之后。 先下载个RE文件管理器, 安装到android机器上之后找到 system\etc\permissions\platform.xml 找到下面的位置 <...
  • 项目要求把 插入U盘 允许权限后, 直接把U盘的某个文件夹以及内容同名字拷贝的android 设备中 读取U盘信息 用到一个开源框架:https://github.com/magnusja/libaums 引入: compile 'com.github.mjdev:libaums:+'...
  • //删除 public static final int STATE_REMOVED = 7; //移除完成 public static final int STATE_BAD_REMOVAL = 8; /** * 接受广播key */ public static final String ACTION_VOLUME_STATE_CHANGED = "android.os....
  • RE管理器是Android平台上必不可少的系统管理工具. 强大的权限功能和灵活的应用程序使RE Manager成为刷新后由许多发烧友安装的第一个软件. 值得注意的是,RE管理器需要获得ROOT许可,否则软件将无法正常启动. 作者...
  • android 识别U盘以及读写文件

    万次阅读 热门讨论 2016-08-29 10:29:05
    android中读写文件的需求地方很多,其中就包括了识别U盘,弹出U盘,读写U盘的文件等。 那么,如何实现这些需求呢?笔者简单的说下: 1.识别U盘: 识别U盘的方法只要是用到了2个android官方类。 它们分别为:...
  • 2:Android手机和一些Android系统的TV盒子对OTG的支持情况? 3:如何得知外接储存设备的插入和拔出的广播事件? 4:得到插入广播后,而又如何去读取外部设备的数据? 一: OTG是什么? OTG是On-The-Go的缩写...
  • Android 7.1 系统挂载U盘后,无法读写

    千次阅读 热门讨论 2018-05-09 18:32:30
    7.1 系统挂载U盘后,无法读写 U盘挂载后,执行 mount命令,查找所有挂载的路径。 发现U盘挂载在 /mnt/media_rw/2E3C-B9C3 下,第三方应用无法读写U盘中信息。由于权限问题所致。 修改: 添加权限。路径:...
  • 主要介绍了Android实现用代码简单安装和卸载APK的方法,涉及Android针对APK文件及package的相关操作技巧,需要的朋友可以参考下
  • 创建Execl、写入Execl数据、导入U盘 public WriteExcel(Context mContext){ this.mContext = mContext; } // 创建excel表 public void createExcel(File file) { deleteExcel(file); WritableSheet ws = null; ...
  • u盘中文件不能显示解决方法集文件不能显示了,但是看属性的时候发现空间仍然被占用,让U盘里面的文件夹重新显示出来可用以下三个方法:1.可以用WINRAR找回文件随意随意打开一个压缩文件,打开对话框后,不要去解压缩...
  • U盘数据恢复常见问题及恢复方法汇总U盘数据丢失了如何恢复?不论在工作还是生活中,U盘都是非常实用的数据存储设备。不过在使用U盘的时候,任何人都无法保障数据绝对安全,U盘数据丢失问题难以避免。U盘数据丢失了,...
  • 首先读取外置TF卡,需要获取到外置TF卡的权限,因为Android 在4.4版本之后 引入了外部存储访问的框架(SAF)。SAF其中的部分功能就是通过其获取对外置TF卡的读写权限,从而操作外置TF卡。 在Android7.0时对外部存储...
  • 实时检测USB的插入,检测并读取文件,也可根据路径进行文件读写操作
  • Android 4.4以上系统,如果你同时使用了机身存储和外部存储, 那么应用程序将无法在外部存储中创建、修改、删除数据。但是应用程序仍然可以往主存储(机身存储)的任意目录中写入数据,不受任何限制。Google表示,...
  • 需修改 vendor/mediatek/proprietary/frameworks/base/storage/java/com/mediatek/storage/StorageDefaultPathDialog.java 在创建对话框之前,调用指定APP,并注释对话框的生成(此对话框是询问用户是否切换默认...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,761
精华内容 1,104
关键字:

u盘删除android