package com.jqyd.son; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import org.json.JSONException; import org.json.JSONObject; import com.jqyd.app.BitmapUtils; import com.jqyd.app.ShareMethod; import com.jqyd.camera.PhotoUtil; import com.jqyd.manager.R; import com.jqyd.manager.Xxfk; import com.jqyd.model.MyLogModule; import com.jqyd.shareInterface.Optdb_interfce; import com.jqyd.shareInterface.Optsharepre_interface; import com.jqyd.shareInterface.UpdataToServer; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.ContentValues; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.database.Cursor; import android.graphics.Bitmap; import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.provider.MediaStore; import android.provider.MediaStore.Audio.Media; import android.text.Html; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; public class Rzsb extends Activity implements OnClickListener { private EditText ywsj; private EditText gznr; private Spinner workMin; private Spinner workSec; private EditText gzcg; private EditText gzjy; private Button gznrHistory; private Button gzcgHistory; private Button up; private Button pz; private Button back; private Optdb_interfce db =null; private Calendar c; private ArrayAdapter<String> adapter_min = null; private ArrayAdapter<String> adapter_sec = null; private Optsharepre_interface share_obj = null; private static String imagePath; private static String imagePath_new; private int num = 1;// 默认第一张 private ArrayList<String> paths = new ArrayList<String>(); private ArrayList<String> picTimes = new ArrayList<String>(); private ShareMethod method; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.rzsb); Log.e("onCreate", "onCreate"); method = new ShareMethod(Rzsb.this); ywsj = (EditText) this.findViewById(R.id.ywsj); gznr = (EditText) this.findViewById(R.id.gznr); workMin = (Spinner) this.findViewById(R.id.workMin); workSec = (Spinner) this.findViewById(R.id.workSec); gzcg = (EditText) this.findViewById(R.id.gzcg); gzjy = (EditText) this.findViewById(R.id.gzjy); gznrHistory = (Button) this.findViewById(R.id.gznrHistory); gzcgHistory = (Button) this.findViewById(R.id.gzcgHistory); up = (Button) this.findViewById(R.id.up); pz = (Button) this.findViewById(R.id.pz); back = (Button) this.findViewById(R.id.back); ywsj.setOnClickListener(this); gznrHistory.setOnClickListener(this); gzcgHistory.setOnClickListener(this); up.setOnClickListener(this); back.setOnClickListener(this); pz.setOnClickListener(this); init(); } // 赋默认值 public void init() { c = Calendar.getInstance(); // 业务时间默认当天 Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String mDateTime1 = formatter.format(date); ywsj.setText(mDateTime1); ArrayList<String> minList = new ArrayList<String>(); minList.add("0小时"); minList.add("1小时"); minList.add("2小时"); minList.add("3小时"); minList.add("4小时"); minList.add("5小时"); minList.add("6小时"); minList.add("7小时"); minList.add("8小时"); adapter_min = new ArrayAdapter<String>(Rzsb.this, android.R.layout.simple_spinner_item, minList); adapter_min .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 绑定适配器 workMin.setAdapter(adapter_min); ArrayList<String> secList = new ArrayList<String>(); secList.add("0分钟"); secList.add("15分钟"); secList.add("30分钟"); secList.add("45分钟"); adapter_sec = new ArrayAdapter<String>(Rzsb.this, android.R.layout.simple_spinner_item, secList); adapter_sec .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 绑定适配器 workSec.setAdapter(adapter_sec); } @Override public void onClick(View v) { // TODO Auto-generated method stub if (v == ywsj) { getDate(); } else if (v == up) { //对业务日期进行时间限制,每月的5号前可以选择上月的,当月的可选择当日前的任一天 int limit = dateLimit(); if(limit == 0){ String gznrStr = gznr.getText().toString(); String gzcgStr = gzcg.getText().toString(); String gzjyStr = gzjy.getText().toString(); if(gznrStr.equals("")){ warnTell("请填写工作内容!"); }else{ if(gzcgStr.equals("")){ gzcg.setText("无"); gzcgStr = "无"; } if(gzjyStr.equals("")){ gzjy.setText("无"); gzjyStr = "无"; } //计算时常 int hour = Integer.parseInt(workMin.getSelectedItem().toString().replaceAll("小时", "")); int minute = Integer.parseInt(workSec.getSelectedItem().toString().replaceAll("分钟", "")); double sc = (double)hour+(double)minute/60; share_obj = new Optsharepre_interface(Rzsb.this); MyLogModule log = new MyLogModule(); log.setCosim(share_obj.getDataFromPres("COSIM")); log.setRegsim(share_obj.getDataFromPres("REGSIM")); log.setYwrq(ywsj.getText().toString()); log.setGznr(gznrStr); log.setGzsc(sc+""); log.setGzyj(gzjyStr); log.setGzcg(gzcgStr); log.setGguid(share_obj.getDataFromPres("GGUID")); log.setZguid(share_obj.getDataFromPres("GUID")); log.setHasimage(false); new GzrzThread(log).start(); } }else{ warnTell("请选择正确的业务日期!"); } }else if(v == pz){ //对业务日期进行时间限制,每月的5号前可以选择上月的,当月的可选择当日前的任一天 int limit = dateLimit(); if(limit == 0){ String gznrStr = gznr.getText().toString(); if(gznrStr.equals("")){ warnTell("请填写工作内容!"); }else{ takePhotos(); } }else{ warnTell("请选择正确的业务日期!"); } } else if (v == back) { finish(); }else if(v == gznrHistory){ db = new Optdb_interfce(Rzsb.this); ArrayList<String> list = db.searchHistory(2, "gznr"); if(list.size()>0){ showHistory(list,0); }else{ showToast("无历史记录!"); } db.close_SqlDb(); }else if(v == gzcgHistory){ db = new Optdb_interfce(Rzsb.this); ArrayList<String> list = db.searchHistory(2, "gzcg"); if(list.size()>0){ showHistory(list,1); }else{ showToast("无历史记录!"); } db.close_SqlDb(); } } /** * 业务日期限制 * @return */ public int dateLimit(){ int result = 0;//返回结果0、正常1、请选择正确的日期 String xzsj = ywsj.getText().toString(); int year = Integer.parseInt((xzsj.split("-"))[0]); int month = Integer.parseInt((xzsj.split("-"))[1]); int day = Integer.parseInt((xzsj.split("-"))[2]); Date date = new Date(); String dates = new SimpleDateFormat("yyyy-MM-dd").format(date); int currYear = Integer.parseInt((dates.split("-"))[0]); int currMonth = Integer.parseInt((dates.split("-"))[1]); int currDay = Integer.parseInt((dates.split("-"))[2]); System.out.println("日期限制---------"+year+"-"+month+"-"+day+"*********"+currYear+"-"+currMonth+"-"+currDay); if(year == currYear){//同一年 if(month==currMonth){//当月 if(day<=currDay){ result = 0; }else{ result = 1; } }else if(currDay<6){//当月5号前,可选择上月 if(month == (currMonth-1)){//上月 result = 0; }else{ result = 1; } }else{ result =1; } }else if(year == currYear-1 && currDay<6 && currMonth==1){//选择上一年,这种情况仅限当月是1号且在当月的5号前的情况 if(month==12){//上一年12月份 result =0; }else{ result =1; } }else{ result =1; } return result; } /** * 弹出历史记录框 * @param list * @param his */ public void showHistory(final ArrayList<String> list,final int his){ String[] data = new String[list.size()]; for (int i = 0; i < list.size(); i++) { data[i] = list.get(i); } new AlertDialog.Builder(Rzsb.this).setTitle("选择历史记录") .setItems(data, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if(his == 0){ gznr.setText(list.get(which)); }else{ gzcg.setText(list.get(which)); } } }).setNegativeButton("取消", null).show(); } // 弹出日期框 public void getDate() { new DatePickerDialog(Rzsb.this, new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker arg0, int year, int month, int date) { // TODO Auto-generated method stub String m = ""; String d = ""; if ((month + 1) < 10) { m = "0" + (month + 1); } else { m = (month + 1) + ""; } if (date < 10) { d = "0" + date; } else { d = date + ""; } String time = year + "-" + m + "-" + d; ywsj.setText(time); } }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show(); } /** * 日志上报线程 * @author Administrator * */ class GzrzThread extends Thread { private MyLogModule log; public GzrzThread(MyLogModule log) { this.log = log; } @Override public void run() { // TODO Auto-generated method stub super.run(); Looper.prepare(); Message message = new Message(); message.what = 1; myHander.sendMessage(message); Message message2 = new Message(); message2.what = 2; Bundle bundle = new Bundle(); JSONObject object = new JSONObject(); try { object.put("cosim", log.getCosim()); object.put("regsim", log.getRegsim()); object.put("gzyj", log.getGzyj()); object.put("ywrq", log.getYwrq()); object.put("gznr", log.getGznr()); object.put("gzsc", log.getGzsc()); object.put("gzcg", log.getGzcg()); object.put("gguid", log.getGguid()); object.put("zguid", log.getZguid()); object.put("hasimage", log.getHasimage()); } catch (JSONException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } System.out.println("日志上报--------------------"+object.toString()); // 请求服务器 String result = new UpdataToServer(Rzsb.this).dataToServer("RZSB", object); if (result != null && !result.equals("-1") && !result.equals("500")) { try { JSONObject obj = new JSONObject(result); String res = obj.getString("result"); if (res.equals("0")) { bundle.putString("msg", "上传成功"); //保存历史记录 db = new Optdb_interfce(Rzsb.this); db.updateHistory(2, "gznr", gznr.getText().toString()); db.updateHistory(2, "gzcg", gzcg.getText().toString()); db.close_SqlDb(); } else { String errMsg = obj.getString("detail"); bundle.putString("msg", errMsg); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else if(result.equals("-1")){ bundle.putString("msg", "抱歉,网络连接失败!"); } else if(result.equals("500")){ bundle.putString("msg", "上报失败,请联系你的管理员!"); } message2.setData(bundle); myHander.sendMessage(message2); Looper.loop(); } } Handler myHander = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 1: showDialog(1); break; case 2: removeDialog(1); Bundle data = msg.getData(); String message = data.getString("msg"); showToast(message); break; } } }; /** * 拍照 */ public void takePhotos() { method.recordLog("日志上报---开始拍照"); if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "SD卡不可用", Toast.LENGTH_SHORT).show(); return; } SimpleDateFormat timeStampFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); String filename = timeStampFormat.format(new Date()); ContentValues values = new ContentValues(); values.put(Media.TITLE, filename); Uri photoUri = null; boolean isOldPath=true; try{ photoUri = getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); }catch(Exception e){ isOldPath=false; } // 限制最多拍五张照片 if (num <= 5) { num += 1; if(isOldPath&&photoUri!=null){ imagePath = getRealPathFromURI(photoUri, getContentResolver()); } //paths.add(imagePath); System.out.println("imagePath:" + imagePath); if(imagePath!=null&&!imagePath.equals("")&&new File(imagePath).exists()){ Log.e("xiao","true"); method.recordLog("日志上报---默认路径可以使用"); }else{ Log.e("xiao", "false"); //如果为FALSE说明无法创建文件 // 更换目录 File dir = new File(PhotoUtil.SDCARD_ROOT_PATH+ PhotoUtil.SAVE_PATH_IN_SDCARD); if(!dir.exists()){ dir.mkdirs(); } imagePath=PhotoUtil.SDCARD_ROOT_PATH+ PhotoUtil.SAVE_PATH_IN_SDCARD+PhotoUtil.createPhotoName(); method.recordLog("日志上报---默认路径不可以使用,使用新的路径"+imagePath); } String picTime = new Date().getTime() + ""; picTimes.add(picTime); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(imagePath))); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); method.recordLog("日志上报---开始调用系统相机"); startActivityForResult(intent, 0); } else { new AlertDialog.Builder(Rzsb.this) .setTitle("提示") .setMessage(Html.fromHtml("对不起最多只能拍摄五张照片!")) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { jumpActivity(); } }).show(); } } /** * 拍照返回结果 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); method.recordLog("日志上报---onActivityResult--"+requestCode+",第二个参数:"+resultCode); if (requestCode != 0) { return; } else if(resultCode == Activity.RESULT_OK){ System.out.println("GetCamera+sendPath:" + imagePath); BitmapUtils bitmapUtils=new BitmapUtils(Rzsb.this); method.recordLog("日志上报---开始读取图片变成bitmap"); //压缩图片之后保存起来 Bitmap bitmap = bitmapUtils.decodeBitmap(imagePath); method.recordLog("日志上报---读取完成,获得的图片是:"+bitmap); if(bitmap!=null){ method.recordLog("日志上报---通过路径获得的bitmap:"+bitmap); Bitmap bitmap_new = bitmapUtils.zoomBitmap(bitmap); method.recordLog("日志上报---通过压缩后获得的新的bitmap:"+bitmap); try { imagePath_new=bitmapUtils.saveBitmap(bitmap_new); method.recordLog("日志上报---保存新的bitmap后得到的路径:"+imagePath_new); } catch (IOException e) { e.printStackTrace(); } paths.add(imagePath_new.equals("")?imagePath:imagePath_new); method.recordLog("日志上报---将路径加入集合:"+paths.get(0)); if(!imagePath_new.equals("")){ method.recordLog("日志上报---新的路径不为null删除老的路径下的图片"); new Thread(new Runnable() { @Override public void run() { Looper.prepare(); File originImage=new File(imagePath); originImage.delete(); Looper.loop(); } }).start(); } new AlertDialog.Builder(Rzsb.this) .setTitle("提示") .setMessage(Html.fromHtml("是否继续拍照?")) .setPositiveButton("继续拍", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { method.recordLog("日志上报---继续拍"); takePhotos(); } }) .setNegativeButton("不拍了", new DialogInterface.OnClickListener() { @SuppressLint("NewApi") public void onClick(DialogInterface dialog, int which) { method.recordLog("日志上报---开始跳转"); // try{ // Rzsb.this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); // method.recordLog("发送刷新图库广播-------------------4.4之前"); // }catch(SecurityException e){ method.recordLog("发送刷新图库广播-------------------4.4之后"); for(String path : paths){ method.recordLog("日志上报---地址++"+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()+"/"+path); MediaScannerConnection.scanFile(Rzsb.this, new String[]{path}, null, null); } // } jumpActivity(); } }).show(); }else { Toast.makeText(this, "手机内存不足,拍照失败", Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(this, "取消拍照", Toast.LENGTH_SHORT).show(); } } // 获得图片保存的路径 public static String getRealPathFromURI(Uri uri, ContentResolver resolver) { String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = resolver.query(uri, proj, null, null, null); int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String str = cursor.getString(column_index); cursor.close(); return str; } /** * 执行跳转 */ public void jumpActivity() { method.recordLog("jumpActivity()"); String gznrStr = gznr.getText().toString(); String gzcgStr = gzcg.getText().toString(); String gzjyStr = gzjy.getText().toString(); String ywrqStr = ywsj.getText().toString(); if(gzcgStr.equals("")){ gzcg.setText("无"); gzcgStr = "无"; } if(gzjyStr.equals("")){ gzjy.setText("无"); gzjyStr = "无"; } method.recordLog("开始计算时常"); //计算时常 int hour = Integer.parseInt(workMin.getSelectedItem().toString().replaceAll("小时", "")); int minute = Integer.parseInt(workSec.getSelectedItem().toString().replaceAll("分钟", "")); method.recordLog("计算完毕,时间为:"+hour+minute/60); double sc = (double)hour+(double)minute/60; share_obj = new Optsharepre_interface(Rzsb.this); Bundle bundle = new Bundle(); Intent intent = new Intent(); //bundle.putString("imagePath", imagePath); share_obj = new Optsharepre_interface(Rzsb.this); bundle.putString("gguid", share_obj.getDataFromPres("GGUID")); bundle.putString("zguid", share_obj.getDataFromPres("GUID")); bundle.putString("cosim", share_obj.getDataFromPres("COSIM")); bundle.putString("regsim", share_obj.getDataFromPres("REGSIM")); bundle.putString("gznr", gznrStr); bundle.putString("ywrq", ywrqStr); bundle.putString("gzsc", String.valueOf(sc).toString()); bundle.putString("gzyj", gzjyStr); bundle.putString("gzcg", gzcgStr); intent.putExtras(bundle); intent.putExtra("pic_sort", "rzsb"); intent.putStringArrayListExtra("imagePaths", paths);// 存放多图片路径 intent.setClass(Rzsb.this, PicMoreDetail.class); method.recordLog("开始跳转"); startActivity(intent); method.recordLog("结束跳转,finish"); finish(); } /** * 清空历史数据 */ public void cheanHisdatas(){ gznr.setText(""); gzcg.setText(""); gzjy.setText(""); init(); } /** * 警告提示 */ public void warnTell(String message){ new AlertDialog.Builder(Rzsb.this).setTitle("警告").setMessage(message) .setPositiveButton("确定", null).show(); } /** * 结果显示 * * @param message */ public void showToast(final String message) { new AlertDialog.Builder(Rzsb.this).setTitle("提示").setMessage(message) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if(message.contains("成功")){ cheanHisdatas(); } } }).show(); } @Override protected Dialog onCreateDialog(int id) { // TODO Auto-generated method stub ProgressDialog dialog = new ProgressDialog(Rzsb.this); dialog.setIndeterminate(true); dialog.setCancelable(false); switch (id) { case 1: dialog.setMessage("正在上传,请稍候……"); break; } return dialog; } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } }