【问题标题】:How to change the default folder the SD card saves to?如何更改 SD 卡保存到的默认文件夹?
【发布时间】:2012-01-27 00:03:49
【问题描述】:

我的应用程序当前保存到我指定的文件夹/Pictures/<app_name>/,但它也保存到默认文件夹/DCIM/Camera/。这导致文件被保存到 SD 卡两次,但在不同的文件夹中。我怎样才能使它不保存到两个文件夹,只保存到我指定的文件夹?

【问题讨论】:

    标签: android save directory default sd-card


    【解决方案1】:

    答案已经得到Here

    直接去原答案--->HERE THE SOLUTION

    如果链接页面发生更改,我只是添加解决方案以避免无效答案。

    检查以下代码:

    private void FillPhotoList() {  
        // initialize the list!    
        GalleryList.clear();    
        String[] projection = { MediaStore.Images.ImageColumns.DISPLAY_NAME }; 
        for(int i=0;i<projection.length;i++)
            Log.i("InfoLog","projection "+projection[0].toString());
        // intialize the Uri and the Cursor, and the current expected size.    
        Cursor c = null;     
        Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
        Log.i("InfoLog","FillPhoto Uri u "+u.toString());
        // Query the Uri to get the data path.  Only if the Uri is valid.    
        if (u != null)    
        {       
            c = managedQuery(u, projection, null, null, null);    
        }     
        // If we found the cursor and found a record in it (we also have the id).    
        if ((c != null) && (c.moveToFirst()))     
        {       
            do        
            {         
                // Loop each and add to the list.         
                GalleryList.add(c.getString(0)); // adding all the images sotred in the mobile phone(Internal and SD card)
    
            }            
            while (c.moveToNext());    
        } 
        Log.i(INFOLOG,"gallery size "+ GalleryList.size());
    } 
    

    这就是该方法发挥作用的地方

     /** Method will check all the photo is the gallery and delete last captured and move it to the required folder.
     */
    public void movingCapturedImageFromDCIMtoMerchandising()
    {
    
        // This is ##### ridiculous.  Some versions of Android save         
        // to the MediaStore as well.  Not sure why!  We don't know what        
        // name Android will give either, so we get to search for this         
        // manually and remove it.           
        String[] projection = { MediaStore.Images.ImageColumns.SIZE, 
                MediaStore.Images.ImageColumns.DISPLAY_NAME, 
                MediaStore.Images.ImageColumns.DATA, 
                BaseColumns._ID,}; 
        // intialize the Uri and the Cursor, and the current expected size.  
    
        for(int i=0;i<projection.length;i++)
            Log.i("InfoLog","on activityresult projection "+projection[i]);
        //+" "+projection[1]+" "+projection[2]+" "+projection[3] this will be needed if u remove the for loop
        Cursor c = null;          
        Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;       
        Log.i("InfoLog","on activityresult Uri u "+u.toString());
    
        if (CurrentFile != null)      
        {                          
            // Query the Uri to get the data path.  Only if the Uri is valid,     
            // and we had a valid size to be searching for.     
            if ((u != null) && (CurrentFile.length() > 0))        
            {              
                //****u is the place from data will come and projection is the specified data what we want
                c = managedQuery(u, projection, null, null, null);      
            }           
            // If we found the cursor and found a record in it (we also have the size). 
            if ((c != null) && (c.moveToFirst()))     
            {             
                do              
                {                
                    // Check each area in the gallery we built before.     
                    boolean bFound = false;               
                    for (String sGallery : GalleryList)                  
                    {                      
                        if (sGallery.equalsIgnoreCase(c.getString(1)))  
                        {                      
                            bFound = true;
                            Log.i("InfoLog","c.getString(1) "+c.getString(1));
                            break;                    
                        }                   
                    }                   
                    // To here we looped the full gallery.                   
                    if (!bFound)     //the file which is newly created and it has to be deleted from the gallery              
                    {                     
                        // This is the NEW image.  If the size is bigger, copy it.          
                        // Then delete it!                    
                        File f = new File(c.getString(2));
    
    
    
    
                        // Ensure it's there, check size, and delete!            
                        if ((f.exists()) && (CurrentFile.length() < c.getLong(0)) && (CurrentFile.delete()))     
                        {                       
                            // Finally we can stop the copy.       
                            try                      
                            {                         
                                CurrentFile.createNewFile();     
                                FileChannel source = null;   
                                FileChannel destination = null; 
                                try                           
                                {                         
                                    source = new FileInputStream(f).getChannel();
                                    destination = new FileOutputStream(CurrentFile).getChannel();  
                                    destination.transferFrom(source, 0, source.size());
                                } 
                                finally                    
                                {
                                    if (source != null)        
                                    {   
                                        source.close();  
                                    }       
                                    if (destination != null)   
                                    {   
                                        destination.close(); 
                                    }                            
                                }                     
                            }                         
                            catch (IOException e)                 
                            {                            
                                // Could not copy the file over.      
                                ToastMaker.makeToast(this, "Error Occured", 0);   
                            }                      
                        }                   
                        //****deleting the file which is in the gallery                           
                        Log.i(INFOLOG,"imagePreORNext1 "+imagePreORNext);
                        Handler handler = new Handler();
                        //handler.postDelayed(runnable,300);
                        Log.i(INFOLOG,"imagePreORNext2 "+imagePreORNext);
                        ContentResolver cr = getContentResolver();       
                        cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, BaseColumns._ID + "=" + c.getString(3), null);
    
                        break;                                          
                    }              
                }            
                while (c.moveToNext());   
            }         
        }       
    
    }
    

    【讨论】:

    【解决方案2】:

    对于 Android Gingerbread 2.3.3 版,您可以更改相机的默认保存位置。启动相机应用程序,单击设置(齿轮),单击扳手选项卡,向下滚动然后选择存储卡。更改为存储卡(相对于内部存储器)。

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      相关资源
      最近更新 更多