精华内容
下载资源
问答
  • 工作中遇到一个问题,音乐播放器可以播放U盘里面的歌曲,但是无法删除删除不会报错,但只是从播放列表中删掉了,发现U盘里面的文件还在)。 怀疑是权限的问题。 查看U盘的挂载目录发现: root@android:/ # ls -...

    工作中遇到一个问题,音乐播放器可以播放U盘里面的歌曲,但是无法删除(删除不会报错,但只是从播放列表中删掉了,发现U盘里面的文件还在)。

    怀疑是权限的问题。

    查看U盘的挂载目录发现:

    root@android:/ # ls -l /mnt/removable/                                         
    d---rwxr-x system   media_rw          1970-01-01 08:00 sda1

    挂载的目录所属用户为system,所属组为media_rw。就是说system用户以及media_rw组内的用户可以对sda1目录进行读写操作,而其他用户没有写操作。

    再看music.apk的manifest.xml文件。其中有这么一行:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    再看系统中platform.xml中对android.permission.WRITE_EXTERNAL_STORAGE的定义:

     58     <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
     59         <group gid="sdcard_rw" />
     61     </permission>
    
    说明music.apk拥有sdcard_rw组的权限,而U盘在所在的组确实media_rw的。所以没有权限作删除操作。

    那么现在有两种方法解决这个问题。

    1.修改platform.xml中对android.permission.WRITE_EXTERNAL_STORAGE的定义:如下:

     58     <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
     59         <group gid="sdcard_rw" />
     60         <group gid="media_rw" />
     61     </permission>
    把music.apk也加入到media_rw组内,那么就拥有对U盘的写权限了。

    2.修改U盘的所属组为sdcard_rw。

    这个修改是在vold中在对U盘进行挂载时修改的,具体就不在详细说明了,参考vold源码。

    展开全文
  • //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添加了读取外部存储的权限但是不能删除SD卡上的内容; 在中添加:android:sharedUserId="android.uid.system" 但这时就不能使用网线或usb仿真了,使用jar签名则可;

    android添加了读取外部存储的权限但是不能删除SD卡上的内容;

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    在<manifest/>中添加:android:sharedUserId="android.uid.system"

    但这时就不能使用网线或usb仿真了,使用jar签名或者在源码下面mmm编译则可;

    展开全文
  • ​ 想要在sd卡或U盘的跟目录修改、创建、删除文件等操作。 ​ 在XML文件中申请权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name=...

    问题描述

    ​ 想要在sd卡或U盘的跟目录修改、创建、删除文件等操作。

    ​ 在XML文件中申请权限

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"
            tools:ignore="ProtectedPermissions" />
    

    在使用如下代码进行文件创建

    try {
        final File newFile = new File("/mnt/media_rw/87FA-0B05/","creat");
        if(newFile != null && !newFile.exists()) {
            newFile.createNewFile();
        }
    }catch (Exception e){
        Log.e("File ",  "err " + e);
    }
    

    运行后就会爆出如下错误

    E/File: err java.io.IOException: Permission denied
    

    查找原因

    ​ 各种baidu得知,是因为Google的SAF存储框架的原因,不可直接访问sdcard。参考链接

    解决办法

    由于可以直接修改AndroidSDK的Frameworks,所以直接将该权限打开即可

    源码目录frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java

    将此处代码

                    case PermissionInfo.PROTECTION_SIGNATURE: {
                        // For all apps signature permissions are install time ones.
                        allowedSig = grantSignaturePermission(perm, pkg, bp, origPermissions);
                        if (allowedSig) {
                            grant = GRANT_INSTALL;
                        }
                    } break;
    

    修改为

                    case PermissionInfo.PROTECTION_SIGNATURE: {
                        // For all apps signature permissions are install time ones.
                        allowedSig = grantSignaturePermission(perm, pkg, bp, origPermissions);
                        if (allowedSig || perm.equals("android.permission.WRITE_MEDIA_STORAGE")) {
                            grant = GRANT_INSTALL;
                        }
                    } break;
    

                case PermissionInfo.PROTECTION_SIGNATURE: {
                    if (true) {
                        grant = GRANT_INSTALL;
                    }
                } break;
    

    即可;

    展开全文
  • 删除外置U盘文件

    2016-10-25 16:28:57
    之前试过各种办法,加了很多权限都无法删除外置的U盘中的文件,后面加了一句话,完美解决:  只需要在中添加一句话就可以:  android:sharedUserId="android.uid.system"  ok!
  • 解压命令:unzip update.zip 或者使用windows下的压缩工具打开压缩文件,删除不需要的文件 ...\META-INF\com\google\android\updater-script 修改模板如下, getprop(“ro.product.device”) == “rk3288” || abor
  • Android的存储的分为:内部存储外部存储(SDCard、移动U盘等)内部存储:内部存储指的是App的内部存储空间,路径通常为:/data/data//...,Android中的SharedPreferences、database、so库文件等都存放于此。...
  • Android 4.4以上系统,如果你同时使用了机身存储和外部存储, 那么应用程序将无法在外部存储中创建、修改、删除数据。但是应用程序仍然可以往主存储(机身存储)的任意目录中写入数据,不受任何限制。Google表示,...
  • 为了避免数据丢失,用户必须掌握如何在使用完计算机后安全地从计算机上卸下外部...本文目录方法1:使用任务栏上的通知区域方法2:使用此PC的程序方法3:启用快速删除功能方法1:使用任务栏上的通知区域弹出U盘的最...
  • 工作中遇到一个问题,音乐播放器可以播放U盘里面的歌曲,但是无法删除删除不会报错,但只是从播放列表中删掉了,发现U盘里面的文件还在)。 怀疑是权限的问题。 查看U盘的挂载目录发现: root@android:/ # ls -l /...
  • 在3328 android10.0上外接u盘/移动硬盘(usb/pcie)开机提示需要格式化,格式化后可以正常使用,但是重启后会再次提示需要格式化 分析 查看log,发现是系统获取LOST.DIR信息时出错,提示No space in … log忘记保存 ...
  • 您知道电脑硬盘是如何读取和存储数据的吗?恢复软件是如何找回数据的...深度扫描是绕过文件系统直接从硬盘、U盘、SD卡等设备底层恢复数据,因此使用深度恢复能找回更多完整数据。同时我们要搞清楚物理硬盘和逻辑硬盘...
  • android文件管理器

    2014-10-21 14:28:00
    android系统文件管理器,识别SD卡U盘,文件复制 剪切 删除 压缩 解压缩功能,排序,视图切换
  • android相关资料

    2012-03-30 16:51:10
    android的相关资料 一个完整英文API 一个中文部分API ,一个sqlite可视工具 ,一个myqq项目(可直接删除 本人自学项目,因公司不能插U盘所以上传。。 请见谅)
  • Android扫盲6之Android如何切换为U盘 Android扫盲7之彩信图片的存储 Android扫盲8之怎样通过蓝牙传输文件 Android扫盲9之减少流量的几个技巧 Android扫盲10之如何为软件买单 Android扫盲11之清理系统垃圾 ...
  • 2)列表显示、名片删除; 3)U盘插入提示、U盘路径自动获取、U盘路径自动保存至数据库; 4)U盘文件扫描,自动收取U盘中符合本程序的名片文件; 5)名片详情查看,带有“将名片文件发送至U盘”、"发送短信"、”...
  • android 文件存储基础

    2016-01-02 19:11:09
    外存:不总是可以使用的,当用户插上电脑将手机作为u盘时候,你的应用将不可以使用这些文件。并且用户可用删除的。 外存中的文件是全局可读的,文件有时候可以被用户删除。 当用户卸载app时候,卸载的文件仅仅
  • 2)列表显示、名片删除; 3)U盘插入提示、U盘路径自动获取、U盘路径自动保存至数据库; 4)U盘文件扫描,自动收取U盘中符合本程序的名片文件; 5)名片详情查看,带有“将名片文件发送至U盘”、"发送短信"、”...
  • 你可以把它看作是移动硬盘或U盘。 对其的操作因该注意的地方 1.在AndroidManifest.xml中加入访问SDCard的权限如下:   &lt;!-- 在SDCard中创建与删除文件权限 --&gt;   &lt;uses-permission ...
  • Android 基于RecyclerView读取、删改图片

    千次阅读 2017-07-27 17:16:18
    这是一个基于RecyclerView实现的本地读取图片的简单demo,具有切换布局,重命名和删除图片的功能,读取图片的效果还不错,在机器上插入U盘读取了几千张图片速度很不错,也没有OOM。
  • 手机文件转存U盘,2种实用方法任你选择,3分钟学会不再求人教 随着手机功能越来越多,我们手机中保存的文件也越来越多,文件一旦过多就会引起手机卡顿,由于文件比较有纪念意义,又不舍得删除,这时候我们就需要把...
  • Android7.1 1、mdev介绍 Linux 传统上使用静态设备创建的方法,在 dev/下创建了大量的节点,而不管这些节点相应的硬件设备是否存在。 Linux 2.6 内核是开始引入可在用户空间执行的udev,允许用户不必再关心主、次...
  • android设备中信息的读取是读取文件数据库的,只有在开机或者其他状态变化(插拔SD卡)时才会扫描文件以更新该数据库,因此当添加或删除文件时(不处于需要刷新数据库的状态中),数据库中并没有该条信息。...
  • 情景:有的app有将信息导出的功能,用于与其他设备共享一些信息,在app上导出信息后,需要在电脑端把导出的信息拷到U盘,然后再拷到另一台设备上导入该信息,但是发现在app导出信息后,android设备中能看到,电脑中...
  • 将准备好的U盘插在电脑端口上,打开ios android 文件。蓝牙二维码需要用手机浏览器扫描安装mac文件夹,使用苹果电脑安装软件,picture文件夹,系统自带的图片方便用于新手测试激光打标机软件使用方法Win文件夹,xp...
  • 比如OPPO手机通过OTG外接一只U盘时,先要打开“OTG连接”,再将U盘接入手机,待文件管理自动弹出后,就可以进行复制、粘贴、删除、移动等操作了。 OTG转接器(Micro-USB TO USB)OTG连接的打开方式原生的Android系统...
  • 今天导了个同事U盘上面的项目报这个错Gradle‘s dependcy cache may...习惯性的百度,上面有人说删除自己的 .gradle文件夹,这坑货害的我删了后android studio连这个项目的妈都不认了 正确的解决办法是根据自己的gr...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

u盘删除android