均在在frameworks/base/media/java/android/mtp/中找到MtpDatabase.java文件中完成

Settings.System.putString(getApplicationContext().getContentResolver(), "filename","'DCIM','Android','Music','Movies'");//在计算机要显示的文件夹
Settings.System.putString(getApplicationContext().getContentResolver(),"renamefile","/storage/emulated/0/Movies,/storage/emulated/0/DCIM");//不可以重命名文件
Settings.System.putString(getApplicationContext().getContentResolver(),"deletenamefile","/storage/emulated/0/Android,/storage/emulated/0/Music");//禁止删除的文件

在PC上只显示指定文件夹  createObjectQuery()中

  1. private Cursor createObjectQuery(int storageID, int format, int parent) throws RemoteException {
  2.         String where;
  3.         String[] whereArgs;
  4.         /// M: Added for USB Develpment debug, more log for more debuging help @{
  5.         SXlog.i(TAG, "createObjectQuery: storageID = 0x "+Integer.toHexString(storageID));
  6.         SXlog.i(TAG, "createObjectQuery: format = 0x "+Integer.toHexString(format));
  7.         SXlog.i(TAG, "createObjectQuery: parent = 0x "+Integer.toHexString(parent));
  8.         /// M: @}
  9.         if (storageID == 0xFFFFFFFF) {
  10.             // query all stores
  11.             if (format == 0) {
  12.                 // query all formats
  13.                 if (parent == 0) {
  14.                     // query all objects
  15.                     where = null;
  16.                     whereArgs = null;
  17.                 } else {
  18.                     if (parent == 0xFFFFFFFF) {
  19.                         // all objects in root of store
  20.                         parent = 0;
  21.                     }
  22.                     where = PARENT_WHERE;
  23.                     whereArgs = new String[] { Integer.toString(parent) };
  24.                 }
  25.             } else {
  26.                 // query specific format
  27.                 if (parent == 0) {
  28.                     // query all objects
  29.                     where = FORMAT_WHERE;
  30.                     whereArgs = new String[] { Integer.toString(format) };
  31.                 } else {
  32.                     if (parent == 0xFFFFFFFF) {
  33.                         // all objects in root of store
  34.                         parent = 0;
  35.                     }
  36.                     where = FORMAT_PARENT_WHERE;
  37.                     whereArgs = new String[] { Integer.toString(format),
  38.                                                Integer.toString(parent) };
  39.                 }
  40.             }
  41.         } else {
  42.             // query specific store
  43.             if (format == 0) {
  44.                 // query all formats
  45.                 if (parent == 0) {
  46.                     // query all objects
  47.                     where = STORAGE_WHERE;
  48.                     whereArgs = new String[] { Integer.toString(storageID) };
  49.                 } else {
  50.                     
  51.                     /*wanchengguo add 20180711 在PC上只显示指定文件夹begin*/
  52.                     /*if (parent == 0xFFFFFFFF) {
  53.                         // all objects in root of store
  54.                         parent = 0;
  55.                     }
  56.                     where = FORMAT_PARENT_WHERE;
  57. */
  58.  
  59.                     if (parent == 0xFFFFFFFF) {
  60.                         // all objects in root of store
  61.                         parent = 0;
  62.                         String filename;//,"file_name in ('DCIM','Log','Movies')"
  63.                         filename = Settings.System.getString(mContext.getContentResolver(), "filename");
  64.                         Log.e("wanchengguo", "580filename="+filename);  
  65.                         Log.e("wanchengguo", "270filename="+filename);
  66.             SXlog.i("wanchengguo", "filename = "+filename);
  67.                         if(filename==""){
  68.                            filename =  "'DCIM','Picture','Movies'";
  69.                         }
  70.                         SXlog.i("wanchengguo", "lengthDeviceName = "+filename.length());
  71.                         if(filename.length()>0) {
  72.                            where = STORAGE_PARENT_WHERE+ " AND " +"file_name in ("+filename+")";
  73.                         }else{
  74.                 where = STORAGE_PARENT_WHERE;
  75.             }
  76.             
  77.                         
  78.                     } else{
  79.                         // code by WenYF
  80.                         where = STORAGE_PARENT_WHERE;
  81.                           }
     
  82.                     /*wanchengguo add 20180711 在PC上只显示指定文件夹end*/
  83.                     whereArgs = new String[] { Integer.toString(storageID),
  84.                                                Integer.toString(parent) };
  85.                 }
  86.             } else {
  87.                 // query specific format
  88.                 if (parent == 0) {
  89.                     // query all objects
  90.                     where = STORAGE_FORMAT_WHERE;
  91.                     whereArgs = new String[] {  Integer.toString(storageID),
  92.                                                 Integer.toString(format) };
  93.                 } else {
  94.                     if (parent == 0xFFFFFFFF) {
  95.                         // all objects in root of store
  96.                         parent = 0;
  97.                     }
  98.                     where = STORAGE_FORMAT_PARENT_WHERE;
  99.                     whereArgs = new String[] { Integer.toString(storageID),
  100.                                                Integer.toString(format),
  101.                                                Integer.toString(parent) };
  102.                 }
  103.             }
  104.         }
  105.         // if we are restricting queries to mSubDirectories, we need to add the restriction
  106.         // onto our "where" arguments
  107.         if (mSubDirectoriesWhere != null) {
  108.             /// M: Added for USB Develpment debug, more log for more debuging help
  109.             SXlog.i(TAG, "createObjectQuery: mSubDirectoriesWhere = "+mSubDirectoriesWhere);
  110.             if (where == null) {
  111.                 where = mSubDirectoriesWhere;
  112.                 whereArgs = mSubDirectoriesWhereArgs;
  113.             } else {
  114.                 where = where + " AND " + mSubDirectoriesWhere;
  115.                 // create new array to hold whereArgs and mSubDirectoriesWhereArgs
  116.                 String[] newWhereArgs =
  117.                         new String[whereArgs.length + mSubDirectoriesWhereArgs.length];
  118.                 int i, j;
  119.                 for (i = 0; i < whereArgs.length; i++) {
  120.                     newWhereArgs[i] = whereArgs[i];
  121.                 }
  122.                 for (j = 0; j < mSubDirectoriesWhereArgs.length; i++, j++) {
  123.                     newWhereArgs[i] = mSubDirectoriesWhereArgs[j];
  124.                 }
  125.                 whereArgs = newWhereArgs;
  126.             }
  127.         } else {
  128.             /// M: Added for USB Develpment debug, more log for more debuging help
  129.             SXlog.e(TAG, "createObjectQuery: mSubDirectoriesWhere = null");
  130.         }
  131.         return mMediaProvider.query(mPackageName, mObjectsUri, ID_PROJECTION, where,
  132.                 whereArgs, null, null);
  133.     }

重命名文件 在renameFile()中

  1.   private static final String[] PATH_PROJECTION = new String[] {
  2.             Files.FileColumns._ID, // 0
  3.             Files.FileColumns.DATA, // 1
  4.             Files.FileColumns.PARENT,//2  ADD Files.FileColumns.PARENT 目的是禁止修改头层文件名 wanchengguo 20180716    
  5.     };

 

  1.  private int renameFile(int handle, String newName) {
  2.         Cursor c = null;
  3.         // first compute current path
  4.         String path = null;
  5.         int parent = -1;//禁止修改头层文件名 wanchengguo 20180716
  6.         String[] whereArgs = new String[] {  Integer.toString(handle) };
  7.         try {
  8.             c = mMediaProvider.query(mPackageName, mObjectsUri, PATH_PROJECTION, ID_WHERE,
  9.                     whereArgs, null, null);
  10.            if (c != null && c.moveToNext()) {
  11.                 path = c.getString(1);
  12.                 parent = c.getInt(2);//禁止修改头层文件名 wanchengguo 20180716
  13.             }
  14.         } catch (RemoteException e) {
  15.             Log.e(TAG, "RemoteException in getObjectFilePath", e);
  16.             return MtpConstants.RESPONSE_GENERAL_ERROR;
  17.         } finally {
  18.             if (c != null) {
  19.                 c.close();
  20.             }
  21.         }
  22.         if (path == null) {
  23.             return MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE;
  24.         }
  25.         // do not allow renaming any of the special subdirectories
  26.         SXlog.e("wanchengguo", "path "+path);
  27.     //path = /storage/emulated/0/Movies
  28.         
  29.         if (isStorageSubDirectory(path)) {               
  30.         //&&path=="/storage/emulated/0/Movies" 
  31.          return MtpConstants.RESPONSE_OBJECT_WRITE_PROTECTED;
  32.         }
  33.        String renamefile = Settings.System.getString(mContext.getContentResolver(), "renamefile");
  34.       int lengthReName = renamefile.length();
  35.         SXlog.i("wanchengguo", "lengthReName = "+lengthReName);
  36.         
  37.         if(parent != -1&&renamefile.length()>0&&renamefile.contains(path)){//parent == 0是头层文件 !=-1是所有文件 禁止修改文件名 wanchengguo 20180716
  38.             return MtpConstants.RESPONSE_OBJECT_WRITE_PROTECTED;
  39.         }
  40.         // now rename the file.  make sure this succeeds before updating database
  41.         File oldFile = new File(path);
  42.         int lastSlash = path.lastIndexOf('/');
  43.         if (lastSlash <= 1) {
  44.             return MtpConstants.RESPONSE_GENERAL_ERROR;
  45.         }
  46.         String newPath = path.substring(0, lastSlash + 1) + newName;
  47.         File newFile = new File(newPath);
  48.         boolean success = oldFile.renameTo(newFile);

禁止删除文件 deleteFile(int handle)

  1.     private static final String[] PATH_FORMAT_PROJECTION = new String[] {
  2.             Files.FileColumns._ID, // 0
  3.             Files.FileColumns.DATA, // 1
  4.             Files.FileColumns.FORMAT, // 2
  5.             Files.FileColumns.FORMAT, // 3 add  Files.FileColumns.FORMAT  禁止删除头层文件夹 wanchengguo 20180716
  1.  private int deleteFile(int handle) {
  2.         mDatabaseModified = true;
  3.         String path = null;
  4.         int format = 0;
  5.         int parent = -1;//禁止删除头层文件夹 wanchengguo 20180716
  6.         /// M: Added for USB Develpment debug, more log for more debuging help
  7.         SXlog.d(TAG, "deleteFile: handle = 0x"+ Integer.toHexString(handle));
  8.         /// M: Added for USB Develpment debug, more log for more debuging help
  9.         Cursor c = null;
  10.         try {
  11.             c = mMediaProvider.query(mPackageName, mObjectsUri, PATH_FORMAT_PROJECTION,
  12.                             ID_WHERE, new String[] {  Integer.toString(handle) }, null, null);
  13.             if (c != null && c.moveToNext()) {
  14.                 // don't convert to media path here, since we will be matching
  15.                 // against paths in the database matching /data/media
  16.                 path = c.getString(1);
  17.                 format = c.getInt(2);
  18.         parent = c.getInt(3);//禁止删除头层文件夹 wanchengguo 20180716
  19.             } else {
  20.                 return MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE;
  21.             }
  22.             if (path == null || format == 0) {
  23.                 return MtpConstants.RESPONSE_GENERAL_ERROR;
  24.             }
  25.         String deletenamefile = Settings.System.getString(mContext.getContentResolver(), "deletenamefile");
  26.         
  27.         SXlog.e("wanchengguo", "953renamefile.contains(path) "+deletenamefile.contains(path));
  28.         int lengthDeleteName = deletenamefile.length();
  29.         SXlog.i("wanchengguo", "lengthDeleteName = "+lengthDeleteName);
  30.         
  31.             //禁止删除头层文件夹 wanchengguo 20180716 begin 
  32.             if (parent != -1&&deletenamefile.length()>0&&deletenamefile.contains(path)) {
  33.                // return MtpConstants.RESPONSE_ACCESS_DENIED;
  34.                return MtpConstants.RESPONSE_GENERAL_ERROR;
  35.                
  36.             }
  37.             //禁止删除头层文件夹 wanchengguo 20180716 end
     

更多相关文章

  1. android 驱动文件权限设置
  2. Android zip文件压缩解压
  3. xml文件中xmlns含义
  4. android中webView JS调用Android的方法、webView的下拉刷新(Swipe
  5. Android根据文件路径加载指定文件
  6. Android 7.0 使用FileProvider 在应用间共享文件
  7. android 实用sax 读取xml文件内容
  8. Android 打开相机、相册获取图片文件,支持Android 9.0系统
  9. 解决 android 在sd卡新建文件后需要重启才能找到

随机推荐

  1. Android入门前言(一)之------Android应用
  2. 深入浅出 - Android系统移植与平台开发(六
  3. conversion to dalvik format failed wit
  4. 提升Android开发效率的最佳实践
  5. android 如何画虚线
  6. android 广告方面知识汇总
  7. Android(安卓)FrameWork学习(二)Android系
  8. Android开发者必须深入学习的10个应用开
  9. Android中解析XML
  10. 【OSC手机App技术解析】- 集成新浪微博An