package com.andbase.demo.activity; import java.io.File; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.apache.http.protocol.HTTP; import android.app.DialogFragment; import android.content.ActivityNotFoundException; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.GridView; import android.widget.TextView; import com.ab.activity.AbActivity; import com.ab.http.AbHttpUtil; import com.ab.http.AbRequestParams; import com.ab.http.AbStringHttpResponseListener; import com.ab.util.AbDialogUtil; import com.ab.util.AbFileUtil; import com.ab.util.AbLogUtil; import com.ab.util.AbStrUtil; import com.ab.util.AbToastUtil; import com.ab.view.progress.AbHorizontalProgressBar; import com.ab.view.titlebar.AbTitleBar; import com.andbase.R; import com.andbase.demo.adapter.ImageShowAdapter; import com.andbase.global.MyApplication; public class AddPhotoActivity extends AbActivity { private MyApplication application; private GridView mGridView = null; private ImageShowAdapter mImagePathAdapter = null; private ArrayList<String> mPhotoList = null; private int selectIndex = 0; private int camIndex = 0; private View mAvatarView = null; /* 用来标识请求照相功能的activity */ private static final int CAMERA_WITH_DATA = 3023; /* 用来标识请求gallery的activity */ private static final int PHOTO_PICKED_WITH_DATA = 3021; /* 用来标识请求裁剪图片后的activity */ private static final int CAMERA_CROP_DATA = 3022; /* 拍照的照片存储位置 */ private File PHOTO_DIR = null; // 照相机拍照得到的图片 private File mCurrentPhotoFile; private String mFileName; /* ProgressBar进度控制 */ private AbHorizontalProgressBar mAbProgressBar; /* 最大100 */ private int max = 100; private int progress = 0; private TextView numberText, maxText; private DialogFragment mAlertDialog = null; private AbHttpUtil mAbHttpUtil = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setAbContentView(R.layout.add_photo); application = (MyApplication) abApplication; AbTitleBar mAbTitleBar = this.getTitleBar(); mAbTitleBar.setTitleText(R.string.photo_add_name); mAbTitleBar.setLogo(R.drawable.button_selector_back); mAbTitleBar.setTitleBarBackground(R.drawable.top_bg); mAbTitleBar.setTitleTextMargin(10, 0, 0, 0); mAbTitleBar.setLogoLine(R.drawable.line); initTitleRightLayout(); mPhotoList = new ArrayList<String>(); //获取Http工具类 mAbHttpUtil = AbHttpUtil.getInstance(this); //默认 mPhotoList.add(String.valueOf(R.drawable.cam_photo)); mGridView = (GridView)findViewById(R.id.myGrid); mImagePathAdapter = new ImageShowAdapter(this, mPhotoList,116,116); mGridView.setAdapter(mImagePathAdapter); //初始化图片保存路径 String photo_dir = AbFileUtil.getImageDownloadDir(this); if(AbStrUtil.isEmpty(photo_dir)){ AbToastUtil.showToast(AddPhotoActivity.this,"存储卡不存在"); }else{ PHOTO_DIR = new File(photo_dir); } Button addBtn = (Button)findViewById(R.id.addBtn); mGridView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { selectIndex = position; if(selectIndex == camIndex){ mAvatarView = mInflater.inflate(R.layout.choose_avatar, null); Button albumButton = (Button)mAvatarView.findViewById(R.id.choose_album); Button camButton = (Button)mAvatarView.findViewById(R.id.choose_cam); Button cancelButton = (Button)mAvatarView.findViewById(R.id.choose_cancel); albumButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(AddPhotoActivity.this); // 从相册中去获取 try { Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); startActivityForResult(intent, PHOTO_PICKED_WITH_DATA); } catch (ActivityNotFoundException e) { AbToastUtil.showToast(AddPhotoActivity.this,"没有找到照片"); } } }); camButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(AddPhotoActivity.this); doPickPhotoAction(); } }); cancelButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { AbDialogUtil.removeDialog(AddPhotoActivity.this); } }); AbDialogUtil.showDialog(mAvatarView,Gravity.BOTTOM); }else{ for(int i=0;i<mImagePathAdapter.getCount();i++){ ImageShowAdapter.ViewHolder mViewHolder = (ImageShowAdapter.ViewHolder)mGridView.getChildAt(i).getTag(); if(mViewHolder!=null){ mViewHolder.mImageView2.setBackgroundDrawable(null); } } ImageShowAdapter.ViewHolder mViewHolder = (ImageShowAdapter.ViewHolder)view.getTag(); mViewHolder.mImageView2.setBackgroundResource(R.drawable.photo_select); } } }); addBtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { uploadFile(mPhotoList); } }); } private void initTitleRightLayout() { } /** * 从照相机获取 */ private void doPickPhotoAction() { String status = Environment.getExternalStorageState(); //判断是否有SD卡,如果有sd卡存入sd卡在说,没有sd卡直接转换为图片 if (status.equals(Environment.MEDIA_MOUNTED)) { doTakePhoto(); } else { AbToastUtil.showToast(AddPhotoActivity.this,"没有可用的存储卡"); } } /** * 拍照获取图片 */ protected void doTakePhoto() { try { mFileName = System.currentTimeMillis() + ".jpg"; mCurrentPhotoFile = new File(PHOTO_DIR, mFileName); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mCurrentPhotoFile)); startActivityForResult(intent, CAMERA_WITH_DATA); } catch (Exception e) { AbToastUtil.showToast(AddPhotoActivity.this,"未找到系统相机程序"); } } /** * 描述:因为调用了Camera和Gally所以要判断他们各自的返回情况, * 他们启动时是这样的startActivityForResult */ protected void onActivityResult(int requestCode, int resultCode, Intent mIntent) { if (resultCode != RESULT_OK){ return; } switch (requestCode) { case PHOTO_PICKED_WITH_DATA: Uri uri = mIntent.getData(); String currentFilePath = getPath(uri); if(!AbStrUtil.isEmpty(currentFilePath)){ Intent intent1 = new Intent(this, CropImageActivity.class); intent1.putExtra("PATH", currentFilePath); startActivityForResult(intent1, CAMERA_CROP_DATA); }else{ AbToastUtil.showToast(AddPhotoActivity.this,"未在存储卡中找到这个文件"); } break; case CAMERA_WITH_DATA: AbLogUtil.d(AddPhotoActivity.class, "将要进行裁剪的图片的路径是 = " + mCurrentPhotoFile.getPath()); String currentFilePath2 = mCurrentPhotoFile.getPath(); Intent intent2 = new Intent(this, CropImageActivity.class); intent2.putExtra("PATH",currentFilePath2); startActivityForResult(intent2,CAMERA_CROP_DATA); break; case CAMERA_CROP_DATA: String path = mIntent.getStringExtra("PATH"); AbLogUtil.d(AddPhotoActivity.class, "裁剪后得到的图片的路径是 = " + path); mImagePathAdapter.addItem(mImagePathAdapter.getCount()-1,path); camIndex++; break; } } /** * 从相册得到的url转换为SD卡中图片路径 */ public String getPath(Uri uri) { if(AbStrUtil.isEmpty(uri.getAuthority())){ return null; } String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String path = cursor.getString(column_index); return path; } public void uploadFile(List<String> list){ //已经在后台上传 if(mAlertDialog!=null){ mAlertDialog.show(getFragmentManager(), "dialog"); return; } String url = "http://192.168.0.104:8080/demo/upload.do"; AbRequestParams params = new AbRequestParams(); try { //多文件上传添加多个即可 params.put("data1",URLEncoder.encode("如果包含中文的处理方式",HTTP.UTF_8)); params.put("data2","100"); //文件参数,去掉后边那个按钮 for(int i=0;i<list.size()-1;i++){ String path = list.get(i); File file = new File(path); params.put(file.getName(),file); } } catch (Exception e) { e.printStackTrace(); } mAbHttpUtil.post(url, params, new AbStringHttpResponseListener() { @Override public void onSuccess(int statusCode, String content) { AbToastUtil.showToast(AddPhotoActivity.this,content); } // 开始执行前 @Override public void onStart() { //打开进度框 View v = LayoutInflater.from(AddPhotoActivity.this).inflate(R.layout.progress_bar_horizontal, null, false); mAbProgressBar = (AbHorizontalProgressBar) v.findViewById(R.id.horizontalProgressBar); numberText = (TextView) v.findViewById(R.id.numberText); maxText = (TextView) v.findViewById(R.id.maxText); maxText.setText(progress+"/"+String.valueOf(max)); mAbProgressBar.setMax(max); mAbProgressBar.setProgress(progress); mAlertDialog = AbDialogUtil.showAlertDialog("正在上传",v); } @Override public void onFailure(int statusCode, String content, Throwable error) { AbToastUtil.showToast(AddPhotoActivity.this,error.getMessage()); } // 进度 @Override public void onProgress(long bytesWritten, long totalSize) { maxText.setText(bytesWritten/(totalSize/max)+"/"+max); mAbProgressBar.setProgress((int)(bytesWritten/(totalSize/max))); } // 完成后调用,失败,成功,都要调用 public void onFinish() { //下载完成取消进度框 if(mAlertDialog!=null){ mAlertDialog.dismiss(); mAlertDialog = null; } }; }); } }