如何更改应用程序的默认存储空间

时间:2013-04-16 16:59:01

标签: android

这是我的示例代码,它将库中选定的图像保存到/data/data/com.isummation.customgallery/files/的应用程序内存中。但我想将文件路径更改为/data/data/com.isummation.customgallery/files/photos。我需要做什么?我如何改变它?

package com.isummation.customgallery;


import com.database.DataBase;

public class AndroidCustomGalleryActivity extends Activity {

private int count;
private Bitmap[] thumbnails;
private boolean[] thumbnailsselection;
private String[] arrPath;
private ImageAdapter imageAdapter;

Cursor imagecursor;

int image_column_index;

Button selectBtn;

ProgressDialog myProgressDialog = null;

DataBase db;
        public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gallery);

    showProgress();
    new Thread() {
        public void run() { 
             try
            {
                loadFeed();
                android.os.Message alertMessage = new android.os.Message();
                alertMessage.what = 1;
                handle.sendMessage(alertMessage);
            }
            catch(Exception e)
            {   
                android.os.Message alertMessage = new android.os.Message();
                alertMessage.what = 2;
                handle.sendMessage(alertMessage);       
            }
        }
     }.start();


    selectBtn = (Button) findViewById(R.id.selectBtn);
    selectBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub

            showProgress();
            new Thread() {
                public void run() { 
                     try
                    {
                        SelecedtPhotos();
                        android.os.Message alertMessage = new  
           android.os.Message();
                        alertMessage.what = 3;
                        handle.sendMessage(alertMessage);
                    }
                    catch(Exception e)
                    {   
                        android.os.Message alertMessage = new  
       android.os.Message();
                        alertMessage.what = 2;
                        handle.sendMessage(alertMessage);       
                    }
                }
            }.start();


        }
    });

}

public static byte[] getBitmapAsByteArray(Bitmap bitmap) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    bitmap.compress(CompressFormat.PNG, 0, outputStream);       
    return outputStream.toByteArray();
}

public class ImageAdapter extends BaseAdapter {

    private LayoutInflater mInflater;

    public ImageAdapter() {
        mInflater = (LayoutInflater)  
          getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return count;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView == null) {

            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.galleryitem,   
   null);
            holder.imageview = (ImageView)   
  convertView.findViewById(R.id.thumbImage);
            holder.checkbox = (CheckBox)  
  convertView.findViewById(R.id.itemCheckBox);

            convertView.setTag(holder);
        }
        else 
        {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.checkbox.setId(position);
        holder.imageview.setId(position);

        holder.checkbox.setOnClickListener(new OnClickListener()  
       {            
            public void onClick(View v) {
                // TODO Auto-generated method stub
                CheckBox cb = (CheckBox) v;
                int id = cb.getId();

                if (thumbnailsselection[id])
                {
                    cb.setChecked(false);
                    thumbnailsselection[id] = false;
                } 
                else 
                {
                    cb.setChecked(true);
                    thumbnailsselection[id] = true;
                }
            }
        });

        /*holder.imageview.setOnClickListener(new OnClickListener()  
      {         
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int id = v.getId();
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.parse("file://" +  
          arrPath[id]), "image/*");
                startActivity(intent);
            }
        });*/

        holder.imageview.setImageBitmap(thumbnails[position]);
        holder.checkbox.setChecked(thumbnailsselection[position]);
        holder.id = position;

        return convertView;
    }
}
class ViewHolder {
    ImageView imageview;
    CheckBox checkbox;
    int id;
}

public void loadFeed()
{
    final String[] columns = { MediaStore.Images.Media.DATA,  
       MediaStore.Images.Media._ID };
    final String orderBy = MediaStore.Images.Media._ID;

    imagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  
         columns, null,null, orderBy);

    image_column_index =  
       imagecursor.getColumnIndex(MediaStore.Images.Media._ID);

    this.count = imagecursor.getCount();

    this.thumbnails = new Bitmap[this.count];

    this.arrPath = new String[this.count];

    this.thumbnailsselection = new boolean[this.count];

    for (int i = 0; i < this.count; i++) 
    {
        imagecursor.moveToPosition(i);
        int id = imagecursor.getInt(image_column_index);
        int dataColumnIndex =  
     imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
        thumbnails[i] =  

    MediaStore.Images.Thumbnails.getThumbnail
   (getApplicationContext().getContentResolver(),  
   id,MediaStore.Images.Thumbnails.MICRO_KIND, null);
        arrPath[i]= imagecursor.getString(dataColumnIndex);
    }

    imagecursor.close();
  }

 private void showProgress()
    {
        myProgressDialog =   
 ProgressDialog.show(AndroidCustomGalleryActivity.this,null,
 "Loading Data...", true); 
    }

    private void hideProgress()
    {
        if (myProgressDialog != null)
            myProgressDialog.dismiss();
    }

   ///////////////////// Get File Name from path ////////////////////////////
public String FileName(String path)
{
    String f = " /";
    boolean c = false;

    for(int i=path.length()-1;i>0;i--)
    {
        if(c == false)
            if(path.charAt(i) == f.charAt(1))
            {
                c = true;
                return  
  path.substring(i+1,path.length());        
            }
    }

    return "";
}

///////////////////// Get Extension from path ////////////////////////////
   public String fileExt(String audio)
    {
    String fileName = "";
    String f = " .";
    boolean c = false;

    for(int i=audio.length()-1;i>0;i--)
    {
        if(c == false)

            if(audio.charAt(i) == f.charAt(1))
            {
                fileName = audio.substring(i+1,audio.length());
                c = true;
            }
    }

    return fileName;
  }

  public void SelecedtPhotos()
  {

    final int len = thumbnailsselection.length;
//  int cnt = 0;

    for (int i =0; i<len; i++)
    {
        if (thumbnailsselection[i])
        {
            //cnt++;

            BitmapFactory.Options options = new  
   BitmapFactory.Options();
            options.inSampleSize = 8; 
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;

            Bitmap bitmap = BitmapFactory.decodeFile(arrPath[i],  
   options);


            try {






                FileOutputStream outputStream =  
   openFileOutput(FileName(arrPath[i]), Context.MODE_PRIVATE);
                outputStream.write(getBitmapAsByteArray(bitmap));
                outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            db = new DataBase(getBaseContext()); 
            try {
                db.createDataBase();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

            db.insert_update("INSERT INTO Photos(name,ext,path) 
  VALUES  ('"+FileName(arrPath[i])+"','"+fileExt(arrPath[i])+"','"+arrPath[i]+"')");

            db.close();

            File file = new File(arrPath[i]);
            boolean t = file.delete();

        }
    }

1 个答案:

答案 0 :(得分:0)

而不是:

FileOutputStream outputStream = openFileOutput(FileName(arrPath[i]), Context.MODE_PRIVATE);

你需要做更多这样的事情:

File photos=new File(getFilesDir(), "photos");
photos.mkdirs();
FileOutputStream outputStream=new FileOutputStream(new File(photos, FileName(arrPath[i])));