如何在android中同时向SD卡添加更多图像

如何在android中同时向SD卡添加更多图像,android,android-emulator,Android,Android Emulator,您好,我正在做一个应用程序,这里我需要从gallery文件夹或camera中选择更多图像。然后我需要将这些选定图像保存到SD卡的其他文件夹中。使用下面的代码,我可以从gallery中选择图像,然后将选定图像存储在一个字符串arraylist中,但如何将这些选定图像存储到SD卡中 public class MultiPhotoSelectActivity extends BaseActivity { private Button dialogButton1,dialogButton2,dial

您好,我正在做一个应用程序,这里我需要从gallery文件夹或camera中选择更多图像。然后我需要将这些选定图像保存到SD卡的其他文件夹中。使用下面的代码,我可以从gallery中选择图像,然后将选定图像存储在一个字符串arraylist中,但如何将这些选定图像存储到SD卡中

  public class MultiPhotoSelectActivity extends BaseActivity {
private Button dialogButton1,dialogButton2,dialogButton3,cancel;
Dialog dialog;
String extStorageDirectory;

Bitmap bm;
private ArrayList<String> imageUrls;
private DisplayImageOptions options;
private ImageAdapter imageAdapter;
final Context context = this;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ac_image_grid);

    //Bundle bundle = getIntent().getExtras();
    //imageUrls = bundle.getStringArray(Extra.IMAGES);

    final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
    final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
    Cursor imagecursor = managedQuery(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
            null, orderBy + " DESC");

    this.imageUrls = new ArrayList<String>();

    for (int i = 0; i < imagecursor.getCount(); i++) {
        imagecursor.moveToPosition(i);
        int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
        imageUrls.add(imagecursor.getString(dataColumnIndex));

        System.out.println("=====> Array path => "+imageUrls.get(i));
    }


    options = new DisplayImageOptions.Builder()
        .showStubImage(R.drawable.stub_image)
        .showImageForEmptyUri(R.drawable.image_for_empty_url)
        .cacheInMemory()
        .cacheOnDisc()
        .build();

    imageAdapter = new ImageAdapter(this, imageUrls);

    GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(imageAdapter);
    /*gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            startImageGalleryActivity(position);
        }
    });*/
}

@Override
protected void onStop() {
    imageLoader.stop();
    super.onStop();
}


public void btnChoosePhotosClick(View v){

ArrayList<String> selectedItems = imageAdapter.getCheckedItems();
        }

public class ImageAdapter extends BaseAdapter {

    ArrayList<String> mList;
    LayoutInflater mInflater;
    Context mContext;
    SparseBooleanArray mSparseBooleanArray;

    public ImageAdapter(Context context, ArrayList<String> imageList) {
        // TODO Auto-generated constructor stub
        mContext = context;
        mInflater = LayoutInflater.from(mContext);
        mSparseBooleanArray = new SparseBooleanArray();
        mList = new ArrayList<String>();
        this.mList = imageList;

    }

    public ArrayList<String> getCheckedItems() {
        ArrayList<String> mTempArry = new ArrayList<String>();

        for(int i=0;i<mList.size();i++) {
            if(mSparseBooleanArray.get(i)) {
                mTempArry.add(mList.get(i));
            }
        }

        return mTempArry;
    }

    @Override
    public int getCount() {
        return imageUrls.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null) {
            convertView = mInflater.inflate(R.layout.row_multiphoto_item, null);
        }

        CheckBox mCheckBox = (CheckBox) convertView.findViewById(R.id.checkBox1);
        final ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);

        imageLoader.displayImage("file://"+imageUrls.get(position), imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingComplete(Bitmap loadedImage) {
                Animation anim = AnimationUtils.loadAnimation(MultiPhotoSelectActivity.this, R.anim.fade_in);
                imageView.setAnimation(anim);
                anim.start();
            }
        });

        mCheckBox.setTag(position);
        mCheckBox.setChecked(mSparseBooleanArray.get(position));
        mCheckBox.setOnCheckedChangeListener(mCheckedChangeListener);

        return convertView;
    }

    OnCheckedChangeListener mCheckedChangeListener = new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);
        }
    };
}
} 
公共类多光子选择活动扩展了BaseActivity{
私有按钮dialogButton1,dialogButton2,dialogButton3,取消;
对话;
字符串extStorageDirectory;
位图bm;
私有ArrayList ImageURL;
私有显示图像选项;
专用图像适配器;
最终上下文=此;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_image_grid);
//Bundle Bundle=getIntent().getExtras();
//imageUrls=bundle.getStringArray(Extra.IMAGES);
最终字符串[]列={MediaStore.Images.Media.DATA,MediaStore.Images.Media.\u ID};
最终字符串orderBy=MediaStore.Images.Media.DATE\u;
游标imagecursor=managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,列,null,
null,orderBy+“DESC”);
this.imageUrls=newArrayList();
对于(int i=0;i数组路径=>”+imageURL.get(i));
}
选项=新建DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_图像)
.showImageForEmptyUri(R.drawable.image\u表示\u空\u url)
.cacheInMemory()
.cacheOnDisc()
.build();
imageAdapter=新的imageAdapter(这是ImageURL);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(imageAdapter);
/*setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
startImageGalleryActivity(职位);
}
});*/
}
@凌驾
受保护的void onStop(){
imageLoader.stop();
super.onStop();
}
公共无效btnChoosePhotosClick(视图五){
ArrayList selectedItems=imageAdapter.getCheckedItems();
}
公共类ImageAdapter扩展了BaseAdapter{
阵列列表;
拉平机;
语境;
SparseBooleanArray mSparseBooleanArray;
公共ImageAdapter(上下文上下文,ArrayList imageList){
//TODO自动生成的构造函数存根
mContext=上下文;
mInflater=LayoutInflater.from(mContext);
mSparseBooleanArray=新SparseBooleanArray();
mList=新的ArrayList();
this.mList=图像列表;
}
公共ArrayList getCheckedItems(){
ArrayList mTempArry=新的ArrayList();
对于(int i=0;i
然后在图像列表的for循环中调用此方法

For(int i = 0; i < imagesUrls.size(); i++){
        saveDataInSdCard(imagesUrls.get(i)); }
For(int i=0;i
谢谢…我给出了如下数组列表selectedItems1=imageAdapter.getCheckedItems();for(int i=0;isaveDataInSdCard();在这行for循环的内部,它要求创建方法..我需要在这里传递任何参数吗?你是否将该图像的url存储到arraylist中。?我没有图像的任何uri,我将所有图像都放在selecteditms1 arraylist中..我编辑完我的代码后,你能在btnChoosePhotosClick方法中看到吗..现在在selecteditems1中arraylist所有图片我选择的图片都在那里是的…我知道了..他给我发邮件的人他给我的代码你说的是多个图片选择和保存id SD卡..对..是的..现在可以在SD卡中选择多个图片..并保存在相同的位置是的,我知道,因为我给你发了代码..让我们一起吧
For(int i = 0; i < imagesUrls.size(); i++){
        saveDataInSdCard(imagesUrls.get(i)); }