简单记录一下

package com.circle.control.activity;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import android.annotation.SuppressLint;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.provider.MediaStore;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Base64;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.circle.common.CommonConstant;
import com.circle.pojo.DemandItem;
import com.circle.service.DemandService;
import com.circle.service.impl.DemandServiceImpl;
import com.circle.util.ActivityUtil;
import com.circle.util.FileUtil;
import com.circle.util.ImageTools;
import com.circle.util.StringUtil;
import com.circle.util.ToastUtil;
import com.radius_circle.R;

@SuppressLint({ "InflateParams", "HandlerLeak" })
public class SendDemandActivity extends BaseActivity {
	private Context context;
	private LinearLayout title_left_ll;
	private TextView title_tv;
	private LinearLayout title_right_ll;
	private Button title_right;
	
	private ListView send_demand_content_lv;
	private SendDemandItemAdapter sendDemandAdapter;
	
	private Button send_demand_change_picture_btn;					// 发送图片按钮
	private LinearLayout send_demand_change_sound_ll;				// 切换图片
	private ImageView send_demand_change_sound_iv;					// 要切换的图片
	private Button send_demand_content_send_btn;					// 发送文字内容按钮
	private EditText send_demand_content_et;						// 要发送文字内容
	
	private RelativeLayout send_demand_show_photo_rl;				// 显示拍照布局
	private ImageView send_demand_choose_photo_iv;					// 选择照片点击
	private ImageView send_demand_take_photo_iv;					// 拍照点击
	
	private LinearLayout send_demand_show_sound_ll;					// 显示录音布局
	private Button send_demand_start_recoding_iv;					// 录音点击
	
	private boolean is_enable_record = false;		// 是否读取到sd卡
	private String saveSoundFilePath = "";			// 录音保存的路径
	private String saveSoundFile = "";				// 录音文件全路径
	private String soundData = "";
	private int downX = 0;							// 手移动的横坐标
	private int downY = 0;							// 手移动的纵坐标
	private boolean is_record_success = false;		// 本次的录音是否成功
	private MediaRecorder mRecorder;				// 录音操作对象
	private long time;
	private LinearLayout start_recording_anim_ll;	// 开始录音动画布局
	private TextView start_recording_hint_tv;		// 开始录音提示文字
	private ImageView start_recording_left_iv;		// 录音动画
	private ImageView start_recording_right_iv;
	private Chronometer start_recording_time_tv;	// 显示录音时间
	private DemandService demandService;			// 发送需求
	private ProgressDialog dialog;
	
	private Dialog alertDialog;						// 弹出层提示
	private View dialogView;						// 弹出层布局
	private TextView dialog_message_tv;				// 弹出层内容
	private Button dialog_confirm_item_btn;			// 点击确定处理
	private Button dialog_cancel_item_btn;			// 点击取消处理
	
	private Dialog dialog_sound;					// 取消录音弹出层提示
	private View dialog_view_sound;					// 弹出层布局
	private ImageView dialog_icon_iv;				// 图标标识
	private TextView dialog_sound_time_tv;		// 弹出层内容
	
	private Integer labelId = 8;					// 选择标签的id
	private String labelName = "家电维修";				// 选择标签的名字
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		context = SendDemandActivity.this;
		setContentView(R.layout.activity_send_demand);
		is_enable_record = checkSoundFile();
		labelId = getIntent().getExtras().getInt("labelId");
		labelName = getIntent().getExtras().getString("labelName");
		initView();
		initListView();
		bindListenner();
	}
	
	/** 检查sd卡是否存在,并创建目录 **/
	private boolean checkSoundFile(){
		if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {//是否有sd卡
			sdcardDir = Environment.getExternalStorageDirectory();
			String path = sdcardDir.getParent() + "/" + sdcardDir.getName();
			String cacheDir = "/"+CommonConstant.ENGLISH_APP_NAME+"/demand/soundcache/";
			saveSoundFilePath = path + cacheDir;
			
			/** 创建目录 **/
			File dir = new File(saveSoundFilePath);
			if (!dir.exists()) {
				dir.mkdirs();
			}
			bitmap_save_path = path+"/"+CommonConstant.ENGLISH_APP_NAME+"/imagecache/";
			return true;
		}else {
			return false;
		}
	}

	/** 初始化布局 **/
	private void initView() {
		
		title_left_ll = (LinearLayout)findViewById(R.id.title_left_ll);
		title_tv = (TextView)findViewById(R.id.title_tv);
		title_tv.setText("发送需求");
		
		title_right_ll = (LinearLayout)findViewById(R.id.title_right_ll);
		title_right_ll.setVisibility(View.VISIBLE);
		title_right = (Button)findViewById(R.id.title_right);
		title_right.setText("确认提交");
		
		send_demand_content_lv = (ListView)findViewById(R.id.send_demand_content_lv);
		
		send_demand_change_picture_btn = (Button)findViewById(R.id.send_demand_change_picture_btn);
		send_demand_change_sound_ll = (LinearLayout)findViewById(R.id.send_demand_change_sound_ll);
		send_demand_change_sound_iv = (ImageView)findViewById(R.id.send_demand_change_sound_iv);// 不负责点击事件
		send_demand_content_send_btn = (Button)findViewById(R.id.send_demand_content_send_btn);
		send_demand_content_et = (EditText)findViewById(R.id.send_demand_content_et);				// 添加焦点事件若空改变图标
		
		send_demand_show_photo_rl = (RelativeLayout)findViewById(R.id.send_demand_show_photo_rl);
		send_demand_choose_photo_iv = (ImageView)findViewById(R.id.send_demand_choose_photo_iv);
		send_demand_take_photo_iv = (ImageView)findViewById(R.id.send_demand_take_photo_iv);
		
		start_recording_anim_ll = (LinearLayout)findViewById(R.id.start_recording_anim_ll);
		start_recording_hint_tv = (TextView)findViewById(R.id.start_recording_hint_tv);
		start_recording_left_iv = (ImageView)findViewById(R.id.start_recording_left_iv);
		start_recording_right_iv = (ImageView)findViewById(R.id.start_recording_right_iv);
		start_recording_time_tv = (Chronometer)findViewById(R.id.start_recording_time_tv);
		
		start_recording_time_tv.setFormat("%s");
		send_demand_show_sound_ll = (LinearLayout)findViewById(R.id.send_demand_show_sound_ll);
		send_demand_start_recoding_iv = (Button)findViewById(R.id.send_demand_start_recoding_iv);
		
		alertDialog = new Dialog(context, R.style.dialog);
		LayoutInflater inflater = LayoutInflater.from(context);
		dialogView = inflater.inflate(R.layout.dialog_del_comfirm_item, null);
		dialog_message_tv = (TextView)dialogView.findViewById(R.id.dialog_message_tv);
		dialog_confirm_item_btn = (Button)dialogView.findViewById(R.id.dialog_confirm_item_btn);
		dialog_cancel_item_btn = (Button)dialogView.findViewById(R.id.dialog_cancel_item_btn);
		alertDialog.setContentView(dialogView);
		
		
		dialog_sound = new Dialog(context, R.style.dialog_bg_white);
		LayoutInflater inflater1 = LayoutInflater.from(context);
		dialog_view_sound = inflater1.inflate(R.layout.dialog_sound_cancel_alert, null);
		dialog_icon_iv = (ImageView)dialog_view_sound.findViewById(R.id.sound_time_iv);
		dialog_sound_time_tv = (TextView)dialog_view_sound.findViewById(R.id.sound_time_tv);
		dialog_sound.setContentView(dialog_view_sound);
	}
	
	@Override
	protected void onDestroy() {
		if(CommonConstant.DEMAND_ITEM_LIST != null && CommonConstant.DEMAND_ITEM_LIST.size() > 0){
			for (int i = 0; i < CommonConstant.DEMAND_ITEM_LIST.size(); i++) {
				File filePath = CommonConstant.DEMAND_ITEM_LIST.get(i).getPictureFile();
				if (filePath != null && filePath.exists()) {
					filePath.delete();
				}
			}
			CommonConstant.DEMAND_ITEM_LIST = null;
		}
		destoryBimap();
		super.onDestroy();
	}
	
	private void initListView(){
		CommonConstant.DEMAND_ITEM_LIST = new ArrayList<DemandItem>();
		DemandItem firstDem = new DemandItem();
		firstDem.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MAX_LEFT);
		CommonConstant.DEMAND_ITEM_LIST.add(firstDem);//添加默认最上面的数据源
		sendDemandAdapter = new SendDemandItemAdapter(context, CommonConstant.DEMAND_ITEM_LIST);
		send_demand_content_lv.setAdapter(sendDemandAdapter);
	}
	/** 添加布局点击事件监听器 **/
	private void bindListenner() {
		if (is_enable_record) {
			send_demand_change_sound_ll.setOnClickListener(commonListener);
			send_demand_start_recoding_iv.setOnClickListener(commonListener);
			send_demand_start_recoding_iv.setOnTouchListener(start_recording_btn_touch_listener);
		}
		title_left_ll.setOnClickListener(commonListener);
		title_right_ll.setOnClickListener(commonListener);
		send_demand_content_et.addTextChangedListener(change_input_text_list);
		send_demand_content_et.setOnClickListener(commonListener);
		send_demand_change_picture_btn.setOnClickListener(commonListener);
		send_demand_content_send_btn.setOnClickListener(commonListener);
		send_demand_choose_photo_iv.setOnClickListener(commonListener);
		send_demand_take_photo_iv.setOnClickListener(commonListener);
		send_demand_content_lv.setOnTouchListener(windowTouchListener);
		
	}
	
	/** 总的点击事件处理 **/
	private OnClickListener commonListener = new OnClickListener() {
		
		@SuppressLint("NewApi")
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.send_demand_content_et:		//点击text隐藏布局
				if (send_demand_content_et.hasFocus()) {
					send_demand_show_photo_rl.setVisibility(View.GONE);
					send_demand_show_sound_ll.setVisibility(View.GONE);
				}
				break;
			case R.id.title_left_ll:		// 返回按钮
				dialog_message_tv.setText("确认放弃本次编辑");
				dialog_confirm_item_btn.setText("确定");
				dialog_cancel_item_btn.setText("取消");
				alertDialog.show();
				dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View view) {
						alertDialog.dismiss();
						onBackPressed();
					}
				});
				dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View view) {
						alertDialog.dismiss();
					}
				});
				break;
			case R.id.title_right_ll:		// 确认发送按钮
				if (CommonConstant.DEMAND_ITEM_LIST != null && CommonConstant.DEMAND_ITEM_LIST.size() > 1) {
					dialog_message_tv.setText("您确认要发送您的需求吗?");
					dialog_confirm_item_btn.setTextColor(getResources().getColor(R.color.dialog_del_left_btn_text_color));
					dialog_cancel_item_btn.setTextColor(getResources().getColor(R.color.public_theme_color));
					
					dialog_confirm_item_btn.setText("返回编辑");
					dialog_cancel_item_btn.setText("确认发送");
					alertDialog.show();
					dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
						@Override
						public void onClick(View view) {
							dialog_confirm_item_btn.setTextColor(getResources().getColor(R.color.public_theme_color));
							dialog_cancel_item_btn.setTextColor(getResources().getColor(R.color.public_black));
							alertDialog.dismiss();
						}
					});
					dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
						@Override
						public void onClick(View view) {
							dialog_confirm_item_btn.setTextColor(getResources().getColor(R.color.public_theme_color));
							dialog_cancel_item_btn.setTextColor(getResources().getColor(R.color.public_black));
							alertDialog.dismiss();
							if (dialog == null) {
								dialog = new ProgressDialog(context);
							}
							dialog.setMessage("处理中请稍候...");
							dialog.setCancelable(false);
							dialog.show();
							Thread thread = new Thread(new SendDemamdRunnable());
							thread.start();
						}
					});
				}
				break;
			case R.id.send_demand_change_picture_btn:		// 切换图片按钮
				
				// 判断 下方显示图片布局是否为显示,为显示的话就隐藏并显示键盘
				if (send_demand_show_photo_rl.getVisibility() == View.VISIBLE) {
					send_demand_show_photo_rl.setVisibility(View.GONE);
					InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
					imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
				} else {
					((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(SendDemandActivity.this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
					send_demand_show_photo_rl.setVisibility(View.VISIBLE);
					send_demand_show_sound_ll.setVisibility(View.GONE);
				}
				break;
			case R.id.send_demand_change_sound_ll:				// 改变语音图片
				if (send_demand_show_sound_ll.getVisibility() == View.VISIBLE) {
					send_demand_show_sound_ll.setVisibility(View.GONE);
					InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
					imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
					send_demand_change_sound_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_show_sond));
				}else {
					send_demand_show_sound_ll.setVisibility(View.VISIBLE);
					send_demand_show_photo_rl.setVisibility(View.GONE);
					((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(SendDemandActivity.this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
					send_demand_change_sound_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_show_input));
				}
				break;
			case R.id.send_demand_start_recoding_iv:			// 判断是否超出范围
				if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
					send_demand_start_recoding_iv.setOnTouchListener(null);
					ToastUtil.makeText(context, "不能超过3条");
				}else {
					send_demand_start_recoding_iv.setOnTouchListener(start_recording_btn_touch_listener);
				}
				break;
			case R.id.send_demand_content_send_btn:				// 发送文字
				if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
					ToastUtil.makeText(context, "不能超过3条");
				}else {
					DemandItem demandItem = new DemandItem();
					demandItem.setDemandTypeVo(CommonConstant.VALUE_MEMBER_TEXT_RIGHT);
					demandItem.setContent(String.valueOf(send_demand_content_et.getText()));
					CommonConstant.DEMAND_ITEM_LIST.add(demandItem);
					DemandItem demo2 = new DemandItem();
					demo2.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
					CommonConstant.DEMAND_ITEM_LIST.add(demo2);
					send_demand_content_et.setText("");
					sendDemandAdapter.notifyDataSetChanged();
				}
				break;
			case R.id.send_demand_choose_photo_iv:				// 选择照片上传
				if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
					ToastUtil.makeText(context, "不能超过3条");
				}else {
					getPictureByAlbum();
				}
				break;
			case R.id.send_demand_take_photo_iv:				// 拍照点击事件
				if (CommonConstant.DEMAND_ITEM_LIST.size() > 6) {
					ToastUtil.makeText(context, "您已经成功添加三条,不能在添加了哦,如果还想添的话可以试试删除上面的内容重新添加");
				}else {
					getPictureByCamera();
				}// 拍照上传
				break;
			default:
				break;
			}
		}
	};
	
	/** 屏幕点击后出发 **/
	@SuppressLint("ClickableViewAccessibility")
	private OnTouchListener windowTouchListener = new OnTouchListener() {
		
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			send_demand_show_photo_rl.setVisibility(View.GONE);
			send_demand_show_sound_ll.setVisibility(View.GONE);
			((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(SendDemandActivity.this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
			return false;
		}
	}; 
	
	/** 输入法输入监听事件 **/
	private TextWatcher change_input_text_list = new TextWatcher(){

		@Override
		public void afterTextChanged(Editable editable) {
		}

		@Override
		public void beforeTextChanged(CharSequence charsequence, int i, int j,int k) {
		}

		@Override
		public void onTextChanged(CharSequence charsequence, int i, int j, int k) {
			if (!StringUtil.isNull(String.valueOf(send_demand_content_et.getText()))) {
				send_demand_content_send_btn.setVisibility(View.VISIBLE);
				send_demand_change_sound_iv.setVisibility(View.GONE);
				send_demand_show_photo_rl.setVisibility(View.GONE);
				send_demand_show_sound_ll.setVisibility(View.GONE);
			} else {
				send_demand_content_send_btn.setVisibility(View.GONE);
				send_demand_change_sound_iv.setVisibility(View.VISIBLE);
			}
		}
	};
	
	/** 录音触摸事件处理 **/
	@SuppressLint("ClickableViewAccessibility")
	private OnTouchListener start_recording_btn_touch_listener = new OnTouchListener() {
		
		@SuppressLint("NewApi")
		@Override
		public boolean onTouch(View view, MotionEvent event) {
			if (CommonConstant.DEMAND_ITEM_LIST.size() <= 5) {
				int x = (int)event.getX();
				int y = (int)event.getY();
				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					dialog_sound_time_tv.setText("手指滑动取消录音");
					dialog_sound_time_tv.setBackground(null);
					dialog_icon_iv.setBackground(getResources().getDrawable(R.drawable.sound_cancel_icon));
					dialog_sound.show();
					start_recording_time_tv.setBase(SystemClock.elapsedRealtime());  
					send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_down));
					start_recording_anim_ll.setVisibility(View.VISIBLE);
					start_recording_hint_tv.setVisibility(View.GONE);
					AnimationDrawable left_animator = (AnimationDrawable) start_recording_left_iv.getBackground();  
					AnimationDrawable right_animator = (AnimationDrawable) start_recording_right_iv.getBackground();  
					left_animator.start();
					right_animator.start();
					
	                saveSoundFile = saveSoundFilePath + new Date().getTime() + new Random().nextInt(999)+".3gp";
					mRecorder = new MediaRecorder();
					mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
					mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					mRecorder.setOutputFile(saveSoundFile);
					mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
					try {
						mRecorder.prepare();
					} catch (IOException e) {
						e.printStackTrace();
					}
					mRecorder.start();
					time = new Date().getTime();
					start_recording_time_tv.start();
					downY = y;
					downX = x;
					is_record_success = true;
					break;
				case MotionEvent.ACTION_MOVE:
					if ((downY - y) > 97 || ((Math.abs(x - downX)) > 97)) {
						dialog_sound_time_tv.setText("松开手指取消录音");
						dialog_sound_time_tv.setBackground(getResources().getDrawable(R.drawable.circle_single_shen_hong_bg));
						
						is_record_success = false;
						send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_up));
						start_recording_anim_ll.setVisibility(View.GONE);
						start_recording_hint_tv.setVisibility(View.VISIBLE);
					}else {
						dialog_sound_time_tv.setText("手指滑动取消录音");
						dialog_sound_time_tv.setBackground(null);
						is_record_success = true;
						send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_down));
						start_recording_anim_ll.setVisibility(View.VISIBLE);
						start_recording_hint_tv.setVisibility(View.GONE);
					}
					break;
				case MotionEvent.ACTION_UP:
					dialog_sound.dismiss();
					
					send_demand_start_recoding_iv.setBackground(getResources().getDrawable(R.drawable.send_demand_play_up));
					start_recording_anim_ll.setVisibility(View.GONE);
					start_recording_hint_tv.setVisibility(View.VISIBLE);
					start_recording_time_tv.stop();
					mRecorder.stop();
					mRecorder.release();
					mRecorder = null;
					long nowTime = new Date().getTime();
					if (nowTime - time < 1000) {
						ToastUtil.makeImageText(context, "按键时间太短");
						is_record_success = false;
					}
					if (is_record_success) {
						File file = new File(saveSoundFile);
						FileInputStream inputFile = null;
						byte[] buffer = null;
						try {
							inputFile = new FileInputStream(file);
							buffer = new byte[(int)file.length()];
							inputFile.read(buffer);
							inputFile.close();
							soundData = Base64.encodeToString(buffer, Base64.DEFAULT);
							
							DemandItem demo1 = new DemandItem();
							demo1.setDemandTypeVo(CommonConstant.VALUE_MEMBER_SOUND_RIGHT);
							demo1.setSoundFilePath(saveSoundFile);
							demo1.setSound(soundData);
							CommonConstant.DEMAND_ITEM_LIST.add(demo1);
							
							if(CommonConstant.DEMAND_ITEM_LIST.size() < 5){
								DemandItem demo2 = new DemandItem();
								demo2.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
								CommonConstant.DEMAND_ITEM_LIST.add(demo2);
							}
							sendDemandAdapter.notifyDataSetChanged();
						} catch (Exception e) {
							e.printStackTrace();
						}
						
					}else {
						File file = new File(saveSoundFile);
						file.delete();
					}
					break;
				default:
					break;
				}
			}
			return false;
		}
	}; 
	
	/********************************** 发送需求线程 *************************************/
	private class SendDemamdRunnable implements Runnable {
		@SuppressLint("HandlerLeak")
		@Override
		public void run() {
			StringBuffer contentSb = new StringBuffer();
			StringBuffer soundSb = new StringBuffer();
			List<File> list = new ArrayList<File>();
			for (int i = 0; i < CommonConstant.DEMAND_ITEM_LIST.size(); i++) {
				DemandItem dItem = CommonConstant.DEMAND_ITEM_LIST.get(i);
				if (CommonConstant.VALUE_MEMBER_PICTURE_RIGHT.equals(dItem.getDemandTypeVo())) {
					list.add(dItem.getPictureFile());
				}else if (CommonConstant.VALUE_MEMBER_SOUND_RIGHT.equals(dItem.getDemandTypeVo())) {
					if (StringUtil.isNull(soundSb.toString())) {
						soundSb.append(dItem.getSound());
					}else {
						soundSb.append(";"+dItem.getSound());
					}
				}else if (CommonConstant.VALUE_MEMBER_TEXT_RIGHT.equals(dItem.getDemandTypeVo())) {
					if (StringUtil.isNull(contentSb.toString())) {
						contentSb.append(dItem.getContent());
					}else {
						contentSb.append(";"+dItem.getContent());
					}
				}
			}
			File [] paramFile = null;
			if (list != null && list.size() > 0) {
				paramFile = new File[list.size()];
				for (int i = 0; i < list.size(); i++) {
					paramFile[i] = list.get(i);
				}
			}
			if (demandService == null) {
				demandService = new DemandServiceImpl(context);
			}
			String url = FileUtil.getConfigProperty(context, "sendDemand");
			boolean result = demandService.sendDemand(
					String.valueOf(contentSb),
					String.valueOf(soundSb), 
					labelId, labelName,url,"sendDemandPicture",paramFile);
			Message msg = new Message();
			if (result) {
				msg.what = 1;
			}else {
				msg.what = 2;
			}
			sendDemandHandler.sendMessage(msg);
		}
	}
	
	private Handler sendDemandHandler = new Handler(){
		public void handleMessage(Message msg) {
			dialog.dismiss();
			if (msg.what == 1) {
				Intent intent = new Intent(context,SendDemandSuccessActivity.class);
				startActivity(intent);
				finish();
			}else {
				Intent intent = new Intent(context,SendDemandErrorActivity.class);
				startActivity(intent);
				finish();
			}
			super.handleMessage(msg);
		};
	};
	
	
	/*********************************  拍照上传辅助方法             *********************/
	//拍照
	private static final int TAKE_PICTURE = 1;   		// 裁剪图片
	private static final int CROP_TAKE_PICTURE = 2;   	// 选择相册截图
	private static final int CROP_CHOOSE_PICTURE = 3;   // 选择相册截图
	private File sdcardDir;                     		// 头像保存文件路径
	private String bitmap_save_path;            		// 头像保存路径
	private File file = null;            				// 头像
	private String user_name="zhangsan";				// 临时存储会员名
	private Uri imageUri = null;
	private Bitmap bitmap;								// 生成的文件
	/** 从相机获得图片 **/
	private void getPictureByCamera() {
		Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		file = new File(bitmap_save_path, user_name);  
	    file.delete();
	    if (!file.exists()) {  
	        try {  
	            file.createNewFile();  
	        } catch (IOException e) {  
	        	
	        }
	    }
		imageUri = Uri.fromFile(file);
		openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
		startActivityForResult(openCameraIntent, CROP_TAKE_PICTURE);
	}
	/** 从相册添加图片 **/
	private void getPictureByAlbum() {
		destoryBimap();
		Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT,null);
		imageUri = Uri.fromFile(new File(bitmap_save_path, user_name));
		openAlbumIntent.setType("image/*");
		openAlbumIntent.putExtra("crop", "false");
		openAlbumIntent.putExtra("aspectX", 1);
		openAlbumIntent.putExtra("aspectY", 2);
		openAlbumIntent.putExtra("outputX", ActivityUtil.dip2px(context, 300));
		openAlbumIntent.putExtra("outputY", ActivityUtil.dip2px(context, 600));
		openAlbumIntent.putExtra("scale", false);
		openAlbumIntent.putExtra("return-data", false);
		openAlbumIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
		openAlbumIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
		openAlbumIntent.putExtra("noFaceDetection", true); // no face detection
		startActivityForResult(openAlbumIntent, CROP_CHOOSE_PICTURE);
	}
	
	
	/** 拍照和从相册中选图片后回调函数 **/
	
	@Override
	protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode == RESULT_OK) {
			switch (requestCode) {
			case TAKE_PICTURE:
			    cropImage(imageUri,1,2, 300, 600, CROP_TAKE_PICTURE);
			    break;
			case CROP_TAKE_PICTURE:
				if(imageUri != null){
			        //bit = ImageTools.decodeUriAsBitmap(context,imageUri);//decode bitmap
			        BitmapFactory.Options options = new BitmapFactory.Options();  
		            options.inSampleSize = 2;
		            bitmap = BitmapFactory.decodeFile(file.getPath(), options);  
				}
				file = ImageTools.savePhotoToSDCard(bitmap, bitmap_save_path, String.valueOf(new Date().getTime() + new Random().nextInt(999)));// 将图片保存在SD卡中
				DemandItem demandItem = new DemandItem();
				demandItem.setDemandTypeVo(CommonConstant.VALUE_MEMBER_PICTURE_RIGHT);
				demandItem.setPictureFile(file);
				demandItem.setPictureBit(bitmap);
				CommonConstant.DEMAND_ITEM_LIST.add(demandItem);
				DemandItem demo1 = new DemandItem();
				demo1.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
				CommonConstant.DEMAND_ITEM_LIST.add(demo1);
				sendDemandAdapter.notifyDataSetChanged();
				send_demand_show_photo_rl.setVisibility(View.GONE);
				break;
			case CROP_CHOOSE_PICTURE:
				if(imageUri != null){
			        bitmap = ImageTools.decodeUriAsBitmap(context,imageUri);//decode bitmap
				}
				file = ImageTools.savePhotoToSDCard(bitmap, bitmap_save_path, String.valueOf(new Date().getTime() + new Random().nextInt(999)));// 将图片保存在SD卡中
				DemandItem demandItem1 = new DemandItem();
				demandItem1.setDemandTypeVo(CommonConstant.VALUE_MEMBER_PICTURE_RIGHT);
				demandItem1.setPictureFile(file);
				demandItem1.setPictureBit(bitmap);
				CommonConstant.DEMAND_ITEM_LIST.add(demandItem1);
				DemandItem demo2 = new DemandItem();
				demo2.setDemandTypeVo(CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT);
				CommonConstant.DEMAND_ITEM_LIST.add(demo2);
				sendDemandAdapter.notifyDataSetChanged();
				send_demand_show_photo_rl.setVisibility(View.GONE);
				break;
			}
		}
	}

	/**
	 * 截图的方法
	 * @param uri
	 *  图片路径
	 * @param aspectX
	 *  X轴比例
	 * @param aspectY
	 *  Y轴比例
	 * @param outputX
	 *  截图的宽
	 * @param outputY
	 *  截图的高
	 * @param requestCode
	 * 
	 *  附加选项	 	  数据类型		描述
		crop		 String		 发送裁剪信号
		aspectX	 	 int	 	X方向上的比例
		aspectY	 	 int		Y方向上的比例
		outputX	 	 int		 裁剪区的宽
		outputY	 	 int		 裁剪区的高
		scale	 	 boolean	 是否保留比例
		return-data	 boolean	 是否将数据保留在Bitmap中返回
		data	 	 Parcelable	 相应的Bitmap数据
		circleCrop	 String	 圆形裁剪区域?
		MediaStore.EXTRA_OUTPUT ("output")	 URI	 将URI指向相应的file:///
	 */
	public void cropImage(Uri uri, int aspectX, int aspectY, int outputX, int outputY, int requestCode) {
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, "image/*");
		intent.putExtra("crop", "true");
		intent.putExtra("aspectX", aspectX);
		intent.putExtra("aspectY", aspectY);
		intent.putExtra("outputX", ActivityUtil.dip2px(context, outputX));
		intent.putExtra("outputY", ActivityUtil.dip2px(context, outputY));
		intent.putExtra("scale", true);
		intent.putExtra("return-data", false);
		intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
		intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
		intent.putExtra("noFaceDetection", true);
		startActivityForResult(intent, requestCode);
	}
	
	/** 清除图片内存 **/
	private void destoryBimap() {  
        if (bitmap != null && !bitmap.isRecycled()) {  
        	bitmap.recycle();  
        	bitmap = null;  
        }
    }  
	/** 发送需求适配器 **/
	class SendDemandItemAdapter extends BaseAdapter {

		private List<DemandItem> demandItemList;
		private LayoutInflater mInflater;
	    public static final int VALUE_MEMBER_SOUND_RIGHT    	= 0;  // 5种不同的布局  
	    public static final int VALUE_MEMBER_TEXT_RIGHT    		= 1;  
	    public static final int VALUE_MEMBER_PICTURE_RIGHT 		= 2;  
	    public static final int VALUE_KEFU_TEXT_MAX_LEFT    	= 3;  
	    public static final int VALUE_KEFU_TEXT_MIN_LEFT      	= 4;  
		
	    private MediaPlayer mPlayer = null;
	    private Context context;
		public SendDemandItemAdapter(Context context, List<DemandItem> demandItemList) {
			this.context = context;
			this.demandItemList = demandItemList;
			this.mInflater = LayoutInflater.from(context);
			this.mPlayer = new MediaPlayer();
		}
		
		@Override
		public int getCount() {
			return demandItemList.size();
		}

		@Override
		public Object getItem(int position) {
			return demandItemList.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}
		
		public int getItemViewType(int position) {
			int type = 0;
			DemandItem entity = demandItemList.get(position);  
			if (CommonConstant.VALUE_MEMBER_SOUND_RIGHT.equals(entity.getDemandTypeVo())) {
				type = 0;
			} else if (CommonConstant.VALUE_MEMBER_TEXT_RIGHT.equals(entity.getDemandTypeVo())) {
				type = 1;
			} else if (CommonConstant.VALUE_MEMBER_PICTURE_RIGHT.equals(entity.getDemandTypeVo())) {
				type = 2;
			}else if (CommonConstant.VALUE_KEFU_TEXT_MAX_LEFT.equals(entity.getDemandTypeVo())) {
				type = 3;
			} else if (CommonConstant.VALUE_KEFU_TEXT_MIN_LEFT.equals(entity.getDemandTypeVo())) {
				type = 4;
			} 
			return type;
		}
		public int getViewTypeCount() {
			return 5;
		}
		
		@SuppressWarnings("deprecation")
		@SuppressLint("NewApi")
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			DemandItem entity = demandItemList.get(position);
			int type = getItemViewType(position);  
			ViewHolder0 viewHolder0 = null;  
			ViewHolder1 viewHolder1 = null;  
			ViewHolder2 viewHolder2 = null;  
			ViewHolder3 viewHolder3 = null;  
			
			if (convertView == null) {
				switch (type) {
				case VALUE_MEMBER_SOUND_RIGHT:
					viewHolder0 = new ViewHolder0();
					convertView = mInflater.inflate(R.layout.adapter_demand_member_sound, null); 
					viewHolder0.timeTv = (TextView)convertView.findViewById(R.id.send_demand_total_time_tv);
					viewHolder0.delIv = (ImageView)convertView.findViewById(R.id.send_demand_sound_delete_iv);
					viewHolder0.soundIv = (ImageView)convertView.findViewById(R.id.send_demand_sond_play_iv);
					convertView.setTag(viewHolder0);
					break;
				case VALUE_MEMBER_TEXT_RIGHT:
					viewHolder1 = new ViewHolder1();
					convertView = mInflater.inflate(R.layout.adapter_demand_member_text, null); 
					viewHolder1.contentTv = (TextView)convertView.findViewById(R.id.send_demand_content_tv);
					viewHolder1.delIv = (ImageView)convertView.findViewById(R.id.send_demand_content_delete_iv);
					convertView.setTag(viewHolder1);
					break;
				case VALUE_MEMBER_PICTURE_RIGHT:
					viewHolder2 = new ViewHolder2();
					convertView = mInflater.inflate(R.layout.adapter_demand_member_picture, null);
					viewHolder2.picIv = (ImageView)convertView.findViewById(R.id.send_demand_img_iv);
					viewHolder2.delIv = (ImageView)convertView.findViewById(R.id.send_demand_img_delete_iv);
					convertView.setTag(viewHolder2);
					break;
				case VALUE_KEFU_TEXT_MAX_LEFT:
					convertView = mInflater.inflate(R.layout.adapter_demand_kefu_max, null);
					break;
				case VALUE_KEFU_TEXT_MIN_LEFT:
					viewHolder3 = new ViewHolder3();
					convertView = mInflater.inflate(R.layout.adapter_demand_kefu_min, null);
					viewHolder3.showTv = (TextView)convertView.findViewById(R.id.adapter_demand_kefu_min);
					convertView.setTag(viewHolder3);
					break;
				default:
					break;
				}
			} else {
				switch (type) {
				case VALUE_MEMBER_SOUND_RIGHT:
					viewHolder0 = (ViewHolder0) convertView.getTag();
					break;
				case VALUE_MEMBER_TEXT_RIGHT:
					viewHolder1 = (ViewHolder1) convertView.getTag();
					break;
				case VALUE_MEMBER_PICTURE_RIGHT:
					viewHolder2 = (ViewHolder2) convertView.getTag();
					break;
				case VALUE_KEFU_TEXT_MAX_LEFT:
					break;
				case VALUE_KEFU_TEXT_MIN_LEFT:
					viewHolder3 = (ViewHolder3) convertView.getTag();
					break;
				default:
					break;
				}
			}
			
			switch (type) {
			case VALUE_MEMBER_SOUND_RIGHT:
				String saveSoundFile = entity.getSoundFilePath();
	        	int soundTime = getSoundTime(saveSoundFile);
	        	viewHolder0.timeTv.setText(soundTime + "\"");
	        	viewHolder0.delIv.setTag(position);
	        	viewHolder0.delIv.setOnClickListener(del_item_listener);
	        	viewHolder0.soundIv.setTag(saveSoundFile);
	        	viewHolder0.soundIv.setOnClickListener(sound_start_play_listener);
				break;
			case VALUE_MEMBER_TEXT_RIGHT:
				viewHolder1.contentTv.setText(entity.getContent());
				viewHolder1.delIv.setTag(position);
	        	viewHolder1.delIv.setOnClickListener(del_item_listener);
				break;
			case VALUE_MEMBER_PICTURE_RIGHT:
				viewHolder2.picIv.setBackground(new BitmapDrawable(entity.getPictureBit()));
				viewHolder2.delIv.setTag(position);
	        	viewHolder2.delIv.setOnClickListener(del_item_listener);
				break;
			case VALUE_KEFU_TEXT_MAX_LEFT:
				break;
			case VALUE_KEFU_TEXT_MIN_LEFT:
				if (position == 2) {
					viewHolder3.showTv.setText("如有补充可以继续添加。");
				}else if(position == 4){
					viewHolder3.showTv.setText("您还可以补充一条,请确认有没有向我们提供您的联系地址。");
				}else {
					viewHolder3.showTv.setText("您已经成功添加三条,不能在添加了哦,如果还想添的话可以试试删除上面的内容重新添加。");
				}
				break;
			default:
				break;
			}
			
			return convertView;
		}

		class ViewHolder0 {
			TextView timeTv;
			ImageView delIv;
			ImageView soundIv;
		}
		class ViewHolder1 {
			ImageView delIv;
			TextView contentTv;
		}
		class ViewHolder2 {
			ImageView delIv;
			ImageView picIv;
		}
		class ViewHolder3 {
			TextView showTv;
		}
		private int getSoundTime(String path){
			if (mPlayer == null) {
				mPlayer = new MediaPlayer();
			}
			int soundTime = 0;
			try {
				mPlayer.setDataSource(path);
				mPlayer.prepare();
				soundTime = mPlayer.getDuration()/1000;
			} catch (Exception e) {
				e.printStackTrace();
				soundTime = -1;
			}
			mPlayer.release();
			mPlayer = null;
			return soundTime;
		}
		
		private boolean playing = false;
		
		@SuppressLint("NewApi")
		private OnClickListener sound_start_play_listener = new OnClickListener() {
			@Override
			public void onClick(final View v) {
				if (!playing) {
					v.setBackground(context.getResources().getDrawable(R.anim.start_playing_iv));
					playing = true;
					String fileName = String.valueOf(v.getTag());
					try {
						final AnimationDrawable animator = (AnimationDrawable) v.getBackground();  
						animator.start();
						mPlayer = new MediaPlayer();
						try {
							mPlayer.setDataSource(fileName);
							mPlayer.prepare();
							mPlayer.start();
						} catch (IOException e) {
							e.printStackTrace();
						}
						mPlayer.setOnCompletionListener(new OnCompletionListener() {
							@SuppressLint("NewApi")
							@Override
							public void onCompletion(MediaPlayer mp) {
								mp.release();
								mp = null;
								playing = false;
								v.setBackground(context.getResources().getDrawable(R.drawable.default_sound));
							}
						});
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		};
		
		/** 删除item点击监听器 **/
		private OnClickListener del_item_listener = new OnClickListener() {
			@Override
			public void onClick(final View v) {
				dialog_message_tv.setText("确认删除本条记录");
				dialog_confirm_item_btn.setText("确定");
				dialog_cancel_item_btn.setText("取消");
				alertDialog.show();
				
				dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View view) {
						alertDialog.dismiss();
						int pos = (int)v.getTag();
						if (demandItemList.get(pos) != null && !StringUtil.isNull(demandItemList.get(pos).getSoundFilePath())) {
							File file = new File(demandItemList.get(pos).getSoundFilePath());
							if (file.exists()) {
								file.delete();
							}
						}
						if (demandItemList.get(pos) != null && demandItemList.get(pos).getPictureFile() != null) {
							File file = demandItemList.get(pos).getPictureFile();
							if (file != null && file.exists()) {
								file.delete();
							}
						}
						demandItemList.remove(pos+1);
						demandItemList.remove(pos);
						notifyDataSetChanged();
					}
				});
				dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View view) {
						alertDialog.dismiss();
					}
				});
			}
		};
	}
	
	/** 返回时候提示 **/
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			dialog_message_tv.setText("确认放弃本次编辑");
			dialog_confirm_item_btn.setText("确定");
			dialog_cancel_item_btn.setText("取消");
			alertDialog.show();
			dialog_confirm_item_btn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View view) {
					alertDialog.dismiss();
					onBackPressed();
				}
			});
			dialog_cancel_item_btn.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View view) {
					alertDialog.dismiss();
				}
			});
		}
		return super.onKeyDown(keyCode, event);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值