package com.electric.chargingpile.activity; import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.app.TimePickerDialog; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; import android.util.Base64; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.electric.chargingpile.R; import com.electric.chargingpile.application.MainApplication; import com.electric.chargingpile.data.Zhan; import com.electric.chargingpile.util.BarColorUtil; import com.electric.chargingpile.util.Bimp; import com.electric.chargingpile.util.DES3; import com.electric.chargingpile.util.FileUtils; import com.electric.chargingpile.util.ImageItem; import com.electric.chargingpile.util.ImageUtils; import com.electric.chargingpile.util.PublicWay; import com.electric.chargingpile.util.Res; import com.electric.chargingpile.util.StatusConstants; import com.electric.chargingpile.util.ToastUtil; import com.electric.chargingpile.util.UploadUtil; import com.electric.chargingpile.view.AlertDialogTwo; import com.electric.chargingpile.view.CustomProgressDialog; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.appindexing.Thing; import com.google.android.gms.common.api.GoogleApiClient; import com.umeng.analytics.MobclickAgent; import com.zhihu.matisse.Matisse; import com.zhihu.matisse.MimeType; import com.zhihu.matisse.engine.impl.GlideEngine; import com.zhihu.matisse.internal.entity.CaptureStrategy; import org.json.JSONException; import org.json.JSONObject; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; import pub.devrel.easypermissions.AfterPermissionGranted; import pub.devrel.easypermissions.EasyPermissions; //站点信息错误界面 public class AlterOneActivity extends Activity implements View.OnClickListener, EasyPermissions.PermissionCallbacks { private static final String TAG = "AlterOneActivity"; private static final int PIC_NUM = 3; private ImageView iv_back; private TextView tv_title; private TextView tv_submit; private TimePickerDialog tpd_open = null; private TimePickerDialog tpd_close = null; private TimePickerDialog tpd_holiday_open = null; private TimePickerDialog tpd_holiday_close = null; private Uri mOutPutFileUri; InputMethodManager imm; private static final long SIZE = 400; private Zhan zhan; private String id; private LinearLayout alterTwo, ll_alter_photo; private RelativeLayout belong, suit, state; private ImageView alterImage1, alterImage2, alterImage3; private static String srcPath = ""; private File mPhotoFile; private String imem, zhan_id, zhan_name; private String parkType = "1"; private Button cancleButton, btn_one, btn_two; private PopupWindow popupWindow; private View popupWindowView; private Context mContext; Bitmap photo, photo2, photo3; private ImageView uploadPhoto; private LinearLayout ll_uploadPhoto; private LinearLayout addPhoto; private CustomProgressDialog pd_info; public static Bitmap bimap; private GridView noScrollgridview; private EditText et_remark; private GridAdapter adapter; private View parentView; private PopupWindow pop = null; Bitmap bm = null; private String camePath;//拍照路径 private LinearLayout ll_popup; private Animation animation; private ImageView point; private Toast toast = null; private static final String PHOTO_FILE_NAME = "android.jpg"; private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz"); private File tempFile; private static final int PHOTO_REQUEST_CAMERA = 1; private static final int PHOTO_REQUEST_GALLERY = 2; private static final int PHOTO_REQUEST_CUT = 3; private final int REQUEST_CAMERA_PERMISSION_CODE = 100; private ProgressDialog insertDialog; private AlertDialogTwo alertDialogTwo; private static final int RC_ALBUM_PERM = 123; public static final int REQUEST_CODE_CHOOSE = 340; Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 1: try { JSONObject jsonObj = new JSONObject(msg.obj.toString()); String status = jsonObj.getString("status"); String info = jsonObj.getString("info"); Log.e("成长模块测试", info); } catch (JSONException e) { e.printStackTrace(); } break; case 2: try { JSONObject jsonObject = new JSONObject(msg.obj.toString()); String rtnCode = jsonObject.getString("rtnCode"); String rtnMsg = jsonObject.getString("rtnMsg"); if (rtnCode.equals("01")) { dismissDialog(); Toast.makeText(AlterOneActivity.this, "感谢您的纠错,我们会尽快审核您提供的充电站信息", Toast.LENGTH_SHORT).show(); finish(); } else { dismissDialog(); Toast.makeText(AlterOneActivity.this, "失败提交", Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); } break; case StatusConstants.REQUEST_WHAT_SUCCESS: break; } super.handleMessage(msg); } }; /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME); Res.init(this); bimap = BitmapFactory.decodeResource( getResources(), R.drawable.addpic65); PublicWay.activityList.add(this); setContentView(R.layout.activity_alter_one); BarColorUtil.initStatusBarColor(AlterOneActivity.this); zhan = (Zhan) getIntent().getSerializableExtra("zhan"); mContext = this; init(); Init(); setDetails(); imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); } private void showTextToast(String msg) { if (toast == null) { toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT); } else { toast.setText(msg); } toast.show(); } public void Init() { pop = new PopupWindow(AlterOneActivity.this); View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null); ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup); pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); pop.setBackgroundDrawable(new BitmapDrawable()); pop.setFocusable(true); pop.setOutsideTouchable(true); pop.setContentView(view); final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent); Button bt1 = (Button) view .findViewById(R.id.item_popupwindows_camera); Button bt2 = (Button) view .findViewById(R.id.item_popupwindows_Photo); Button bt3 = (Button) view .findViewById(R.id.item_popupwindows_cancel); parent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub pop.dismiss(); ll_popup.clearAnimation(); } }); bt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pop.dismiss(); ll_popup.clearAnimation(); if (MainScanActivity.isCameraUseable()) { photo(); } else { ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT); } } }); bt2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(AlterOneActivity.this, AlbumActivityAlter.class); startActivity(intent); overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out); pop.dismiss(); ll_popup.clearAnimation(); } }); bt3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pop.dismiss(); ll_popup.clearAnimation(); } }); noScrollgridview = (GridView) findViewById(R.id.noScrollgridview); noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT)); adapter = new GridAdapter(this); adapter.update(); noScrollgridview.setAdapter(adapter); noScrollgridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { if (arg2 == Bimp.tempSelectBitmap.size()) { permissionTask(); } else { Intent intent = new Intent(AlterOneActivity.this, GalleryActivityAlter.class); intent.putExtra("position", "1"); intent.putExtra("ID", arg2); startActivity(intent); } } }); } /** * 调用图库选择 */ private void callGallery() { Matisse.from(AlterOneActivity.this) .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF)) .showSingleMediaType(true) .countable(true) .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size()) .capture(true) .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider")) .imageEngine(new GlideEngine()) .forResult(REQUEST_CODE_CHOOSE); } @Override protected void onActivityResult(int requestCode, int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { if (data != null) { if (requestCode == 1) { //处理调用系统图库 } else if (requestCode == REQUEST_CODE_CHOOSE) { //异步方式插入图片 insertImagesSync(data); } } } } /** * 异步方式插入图片 * * @param data */ private void insertImagesSync(final Intent data) { insertDialog.show(); Observable.just(data) .flatMap(new Function>() { @Override public ObservableSource apply(Intent intent) throws Exception { try { List uriList = Matisse.obtainResult(data); for (Uri uri: uriList) { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); File file = FileUtils.from(AlterOneActivity.this, uri); bitmap = FileUtils.rotateIfRequired(file, bitmap); bitmap = imageZoom(bitmap); ImageItem takePhoto = new ImageItem(); takePhoto.setBitmap(bitmap); Bimp.tempSelectBitmap.add(takePhoto); } return Observable.just(true); } catch (Exception ex) { return Observable.just(true); } } }) .subscribeOn(Schedulers.io())//生产事件在io .observeOn(AndroidSchedulers.mainThread())//消费事件在UI线程 .subscribe(new Consumer() { @Override public void accept(Boolean aBoolean) throws Exception { if (aBoolean) { Log.e(TAG, "onCompleted: -------------"); insertDialog.dismiss(); adapter.update(); } else { insertDialog.dismiss(); Log.e(TAG, "onError: " + "图片插入失败:"); ToastUtil.showToast(getApplicationContext(), "图片插入失败", Toast.LENGTH_SHORT); } } }, new Consumer() { @Override public void accept(Throwable throwable) throws Exception { insertDialog.dismiss(); Log.e(TAG, "onError: " + "图片插入失败:" + throwable.getMessage()); ToastUtil.showToast(getApplicationContext(), "图片插入失败", Toast.LENGTH_SHORT); } }); } private void init() { insertDialog = new ProgressDialog(this); insertDialog.setMessage("正在插入图片..."); insertDialog.setCanceledOnTouchOutside(false); alertDialogTwo = new AlertDialogTwo(AlterOneActivity.this); tv_submit = (TextView) findViewById(R.id.tv_submit); tv_submit.setOnClickListener(this); String title = getIntent().getStringExtra("title"); Log.d("title===", title); tv_title = (TextView) findViewById(R.id.textview); tv_title.setText(title); // point = (ImageView) findViewById(R.id.tv_one); animation = AnimationUtils.loadAnimation(AlterOneActivity.this, R.anim.nn); iv_back = (ImageView) findViewById(R.id.iv_back); iv_back.setOnClickListener(this); et_remark = (EditText) findViewById(R.id.et_alterinfo); // iv_detail = (ImageView) findViewById(R.id.iv_detail); } //从Zhan接口中获取对应站点的原有信息 private void setDetails() { zhan_id = getIntent().getStringExtra("zhanid"); zhan_name = getIntent().getStringExtra("zhanname"); } public void createDialog() { if (pd_info == null) { pd_info = CustomProgressDialog.createDialog(mContext); pd_info.setMessage(mContext.getResources().getString( R.string.version_updating)); pd_info.show(); } } public void dismissDialog() { if (pd_info != null) { pd_info.dismiss(); pd_info = null; } } /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ public Action getIndexApiAction() { Thing object = new Thing.Builder() .setName("AlterOne Page") // TODO: Define a title for the content shown. // TODO: Make sure this auto-generated URL is correct. .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]")) .build(); return new Action.Builder(Action.TYPE_VIEW) .setObject(object) .setActionStatus(Action.STATUS_TYPE_COMPLETED) .build(); } @Override public void onStart() { super.onStart(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client.connect(); AppIndex.AppIndexApi.start(client, getIndexApiAction()); } @Override public void onStop() { super.onStop(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. AppIndex.AppIndexApi.end(client, getIndexApiAction()); client.disconnect(); } @SuppressLint("HandlerLeak") public class GridAdapter extends BaseAdapter { private LayoutInflater inflater; private int selectedPosition = -1; private boolean shape; public boolean isShape() { return shape; } public void setShape(boolean shape) { this.shape = shape; } public GridAdapter(Context context) { inflater = LayoutInflater.from(context); } public void update() { loading(); } public int getCount() { if (Bimp.tempSelectBitmap.size() == 3) { return 3; } return (Bimp.tempSelectBitmap.size() + 1); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } public void setSelectedPosition(int position) { selectedPosition = position; } public int getSelectedPosition() { return selectedPosition; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.item_published_grida, parent, false); holder = new ViewHolder(); holder.image = (ImageView) convertView .findViewById(R.id.item_grida_image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (position == Bimp.tempSelectBitmap.size()) { holder.image.setImageBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.icon_defaultadd1105)); if (position == 3) { holder.image.setVisibility(View.GONE); } } else { holder.image.setImageBitmap(Bimp.tempSelectBitmap.get(position).getBitmap()); } return convertView; } public class ViewHolder { public ImageView image; } Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 1: adapter.notifyDataSetChanged(); break; } super.handleMessage(msg); } }; public void loading() { new Thread(new Runnable() { public void run() { while (true) { if (Bimp.max == Bimp.tempSelectBitmap.size()) { Message message = new Message(); message.what = 1; handler.sendMessage(message); break; } else { Bimp.max += 1; Message message = new Message(); message.what = 1; handler.sendMessage(message); } } } }).start(); } } public String getString(String s) { String path = null; if (s == null) return ""; for (int i = s.length() - 1; i > 0; i++) { s.charAt(i); } return path; } @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(this); } protected void onRestart() { adapter.update(); super.onRestart(); } private static final int TAKE_PICTURE = 0x000001; public void photo() { if (hasSdcard()) { int currentapiVersion = Build.VERSION.SDK_INT; Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//��������� intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile)); startActivityForResult(intent, PHOTO_REQUEST_CAMERA); } } @Override public void onClick(View v) { if (imm.isActive()) { View view = getWindow().peekDecorView(); if (view != null) { imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } } switch (v.getId()) { case R.id.tv_submit: String s = et_remark.getText().toString(); if (containsEmoji(s)) { ToastUtil.showToast(getApplicationContext(), "不支持输入表情", Toast.LENGTH_SHORT); break; } if (s.equals("") && s.trim().isEmpty() && Bimp.tempSelectBitmap.size() == 0) { Log.e("@@@", "@@@"); showTextToast("请填写纠错信息"); } else { Log.e("!!!", "!!!"); createDialog(); new Thread(new Runnable() { @Override public void run() { try { shite(""); } catch (Exception e) { e.printStackTrace(); } } }).start(); } break; case R.id.iv_detail: startActivity(new Intent()); break; case R.id.iv_back: finish(); break; } } public void shite(String s) throws Exception { Map par = new HashMap(); String file; long appTime1 = System.currentTimeMillis() / 1000; Log.i("appTime(long)---", appTime1 + ""); long updatetime = appTime1 - MainMapActivity.cha - 1; Log.i("updatetime(long)---", updatetime + ""); Log.i("cha---", MainMapActivity.cha + ""); String token = String.valueOf(updatetime); Log.i("token---", token); for (int i = 0; i < Bimp.tempSelectBitmap.size(); i++) { try { bm = imageZoom(Bimp.tempSelectBitmap.get(i).getBitmap()); file = bitmapToBase64(bm); par.put("file" + (i + 1), file); Log.i("file--------" + (i + 1), file); par.put("filename" + (i + 1), "androidapp.jpg"); } catch (Exception e) { e.printStackTrace(); } } // par.put("user_id", MainApplication.userId); // par.put("zhan_name", zhan_name); // par.put("zhan_id", zhan_id); par.put("user_id", MainApplication.userId); par.put("stop_cost", ""); par.put("server_cost", ""); par.put("zhan_id", zhan_id); par.put("other", ""); par.put("park_location", ""); par.put("contact", et_remark.getText().toString()); par.put("zhan_name", zhan_name); par.put("token", DES3.encode(token)); Log.e("user_id:", MainApplication.userId + ",zhan_id:" + zhan_id + ",zhan_name:" + zhan_name + ",remark:" + et_remark.getText().toString()); try { String u = UploadUtil.post( MainApplication.url + "/zhannew/basic/web/index.php/zhanalterinfo/add", // "http://123.57.6.131/zhannew/basic/web/index.php/zhanlist/add", // "http://123.57.6.131/zhannew/basic/web/index.php/investigateresults/add", par, null); System.err.println(u); // submit(u); Message msg = new Message(); msg.obj = u; msg.what = 2; handler.sendMessage(msg); } catch (IOException e) { e.printStackTrace(); } } // private void alterOne() { // new Thread(new Runnable() { // @Override // public void run() { // String url = "http://123.57.6.131/zhannew/basic/web/index.php/zhanalterpoi/add?stop_cost="+parkCost.getText().toString()+"&server_cost="+serviceCost.getText().toString()+"&user_id="+ MainApplication.userPhone+"&zhan_id="+zhan_id+"&contact="+remark.getText().toString()+"&other="+parkType+"&zhan_name="+zhan.getZhan_name(); // submit(url); // } // }).start(); // } // // private void submit( String sms) { // // Log.e("url", sms); // Request request = new Request.Builder().url(sms).build(); // Response response = null; // try{ // if(request==null){ // Message msg = new Message(); // msg.what=3; // handler.sendMessage(msg); // return; // } // response = OkHttpUtil.execute(request); // if (response.code() == 200) { // String json = ""; // try { // json = response.body().string(); // Message msg = new Message(); // msg.obj = json; // msg.what=2; // handler.sendMessage(msg); // Log.e("url", json); // }catch (Exception e){ // e.printStackTrace(); // Message msg = new Message(); // msg.what=3; // handler.sendMessage(msg); // } // } // }catch (Exception e){ // e.printStackTrace(); // Message msg = new Message(); // msg.what=3; // handler.sendMessage(msg); // } // } // private void addPHoto(final String s) { // if (!NetUtil.CheckNetwork(this)) { // Toast.makeText(this, "请检查网络", Toast.LENGTH_SHORT).show(); // return; // } // new Thread(new Runnable() { // @Override // public void run() { //// // try { // Map par = new HashMap(); // par.put("file", s); //// par.put("file1", s); //// par.put("file2", s); // // par.put("filename","head.jpg"); // par.put("zhan_id",zhan_id); // par.put("user_id",MainApplication.userPhone); // par.put("ishot","2"); // //如果是热点标注部分图片ishot为1 // Log.i("++++++++@","filename:"+s+",zhan_id:"+zhan_id+",user_id:"+MainApplication.userPhone); // String u = UploadUtil.post("http://123.57.6.131/zhan/index.php?m=content&c=upfile",par, null); // Message msg = new Message(); // msg.obj = u; // msg.what=5; // handler.sendMessage(msg); // Log.e("url", u); // } catch (Exception e) { // e.printStackTrace(); // Message msg = new Message(); // msg.what=3; // handler.sendMessage(msg); // } // } // }).start(); // // } // private static boolean isTrueDate(String date1, String date2) { // SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); // try { // Date dt1 = df.parse(date1); // Date dt2 = df.parse(date2); // // System.err.println(dt1.getTime() - dt2.getTime()); // long cha = dt1.getTime() - dt2.getTime(); // if (cha >= 0 && cha <= 259200000) { // return true; // } else { // return false; // } // } catch (Exception exception) { // exception.printStackTrace(); // } // return false; // // } // // /** // * 裁剪图片方法实现 @param uri    // */ // public void startPhotoZoom(Uri uri) { // /* // *   * 至于下面这个Intent的ACTION是怎么知道的,大家可以看下自己路径下的如下网页   * // * yourself_sdk_path/docs/reference/android/content/Intent.html   * // * 直接在里面Ctrl+F搜:CROP ,之前小马没仔细看过,其实安卓系统早已经有自带图片裁剪功能,   * 是直接调本地库的,不懂C C++ // * 这个不做详细了解去了,有轮子就用轮子,不再研究轮子是怎么   * 制做的了...吼吼    // */ // Intent intent = new Intent("com.android.camera.action.CROP"); // intent.setDataAndType(uri, "image/*"); // // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 // intent.putExtra("crop", "true"); // // aspectX aspectY 是宽高的比例 // intent.putExtra("aspectX", 16); // intent.putExtra("aspectY", 9); // // outputX outputY 是裁剪图片宽高 // intent.putExtra("outputX", 480); // intent.putExtra("outputY", 270); // intent.putExtra("return-data", true); // startActivityForResult(intent, 3); // } // // // // /** 保存裁剪之后的图片数据 **/ // private void setPicToView(Intent picdata) { // Bundle extras = picdata.getExtras(); // if (extras != null) { // photo = extras.getParcelable("data"); // if (photo != null) { // // m_imageUser.setImageBitmap((Bitmap) photo); //// 给image设置图片 //// alterImage1.setImageBitmap(photo); //// uploadPhoto.setImageBitmap(photo); //// addPhoto.setVisibility(View.GONE); //// ll_uploadPhoto.setVisibility(View.VISIBLE); // String fileName = String.valueOf(System.currentTimeMillis()); //// Bitmap bm = (Bitmap) photo.getExtras().get("data"); // FileUtils.saveBitmap(bm, fileName); //// // ImageItem takePhoto = new ImageItem(); // takePhoto.setBitmap(photo); // takePhoto.setImagePath(FileUtils.SDPATH + fileName + ".JPEG"); // Bimp.tempSelectBitmap.add(takePhoto); // } // // } // } // if (extras != null) { // photo2 = extras.getParcelable("data"); // if (photo2 != null) { // // m_imageUser.setImageBitmap((Bitmap) photo); //// 给image设置图片 // alterImage2.setImageBitmap(photo2); // // } // } // if (extras != null) { // photo3 = extras.getParcelable("data"); // if (photo3 != null) { // // m_imageUser.setImageBitmap((Bitmap) photo); //// 给image设置图片 // alterImage3.setImageBitmap(photo2); // // } // } private Bitmap imageZoom(Bitmap bm) { // 图片允许最大空间 单位:KB double maxSize = 200.00; // 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大) ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] b = baos.toByteArray(); // 将字节换成KB double mid = b.length / 1024; // 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩 if (mid > maxSize) { // 获取bitmap大小 是允许最大大小的多少倍 double i = mid / maxSize; // 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍 // (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小) bm = zoomImage(bm, bm.getWidth() / Math.sqrt(i), bm.getHeight() / Math.sqrt(i)); } return bm; } public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) { // 获取这个图片的宽和高 float width = bgimage.getWidth(); float height = bgimage.getHeight(); // 创建操作图片用的matrix对象 Matrix matrix = new Matrix(); // 计算宽高缩放率 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 缩放图片动作 matrix.postScale(scaleWidth, scaleHeight); Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width, (int) height, matrix, true); // iv_2.setImageBitmap(bitmap); // tv_2.setText(bitmap.getRowBytes() * bitmap.getHeight() + ""); return bitmap; } private String bitmapToBase64(Bitmap bitmap) { String result = null; ByteArrayOutputStream baos = null; try { if (bitmap != null) { baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); baos.flush(); baos.close(); byte[] bitmapBytes = baos.toByteArray(); result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (baos != null) { baos.flush(); baos.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } @Override protected void onDestroy() { // Bimp.tempSelectBitmap.clear(); // adapter.update(); Bimp.tempSelectBitmap.clear(); Bimp.max = 0; super.onDestroy(); } // public Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) { // // 获取这个图片的宽和高 // float width = bgimage.getWidth(); // float height = bgimage.getHeight(); // // 创建操作图片用的matrix对象 // Matrix matrix = new Matrix(); // // 计算宽高缩放率 // float scaleWidth = ((float) newWidth) / width; // float scaleHeight = ((float) newHeight) / height; // // 缩放图片动作 // matrix.postScale(scaleWidth, scaleHeight); // Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width, // (int) height, matrix, true); //// iv_2.setImageBitmap(bitmap); //// tv_2.setText(bitmap.getRowBytes() * bitmap.getHeight() + ""); // return bitmap; // } // private void imageZoom(Bitmap bm) { // // 图片允许最大空间 单位:KB // double maxSize = 400.00; // // 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大) // ByteArrayOutputStream baos = new ByteArrayOutputStream(); // bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); // byte[] b = baos.toByteArray(); // // 将字节换成KB // double mid = b.length / 1024; // // 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩 // if (mid > maxSize) { // // 获取bitmap大小 是允许最大大小的多少倍 // double i = mid / maxSize; // // 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍 // // (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小) // bm = zoomImage(bm, bm.getWidth() / Math.sqrt(i), bm.getHeight() // / Math.sqrt(i)); // } // } public void compress(Bitmap bitmap) { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); float hh = dm.heightPixels; float ww = dm.widthPixels; BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; // Bitmap bitmap = BitmapFactory.decodeFile(srcPath, opts); opts.inJustDecodeBounds = false; int w = opts.outWidth; int h = opts.outHeight; int size = 0; if (w <= ww && h <= hh) { size = 1; } else { double scale = w >= h ? w / ww : h / hh; double log = Math.log(scale) / Math.log(2); double logCeil = Math.ceil(log); size = (int) Math.pow(2, logCeil); } opts.inSampleSize = size; // bitmap = BitmapFactory.decodeFile(srcPath, opts); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int quality = 100; bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos); System.out.println(baos.toByteArray().length); while (baos.toByteArray().length > SIZE) { baos.reset(); bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos); quality -= 20; System.out.println(baos.toByteArray().length); } try { // BitmapFactory.decodeByteArray(baos, 0, baos.toByteArray()); // baos.writeTo(new FileOutputStream( // "/mnt/sdcard/Servyou/photo/buffer/22.jpg")); } catch (Exception e) { e.printStackTrace(); } finally { try { baos.flush(); baos.close(); } catch (IOException e) { e.printStackTrace(); } } } private void crop(Uri uri, Uri cutImgUri) { // �ü�ͼƬ��ͼ Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(getImageContentUri(this, tempFile), "image/*"); intent.putExtra("crop", "true"); // �ü���ı�����1��1 // intent.putExtra("aspectX", 16); // intent.putExtra("aspectY", 9); // // �ü������ͼƬ�ijߴ��С // intent.putExtra("outputX", 640); // intent.putExtra("outputY", 360); // ͼƬ��ʽ intent.putExtra("outputFormat", "JPEG"); intent.putExtra("noFaceDetection", true);// ȡ������ʶ�� intent.putExtra("return-data", false);// true:������uri��false������uri intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//д���ȡ��ͼƬ startActivityForResult(intent, PHOTO_REQUEST_CUT); } private boolean hasSdcard() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return true; } else { return false; } } private static String getPath(String path) { File f = new File(path); if (!f.exists()) { f.mkdirs(); } return f.getAbsolutePath(); } private File getFile(String path) { File f = new File(path); if (!f.exists()) { try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } return f; } public Bitmap decodeUriAsBitmap(Uri uri) { Bitmap bitmap = null; try { bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri)); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } return bitmap; } public static Uri getImageContentUri(Context context, File imageFile) { String filePath = imageFile.getAbsolutePath(); Cursor cursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ", new String[]{filePath}, null); if (cursor != null && cursor.moveToFirst()) { int id = cursor.getInt(cursor .getColumnIndex(MediaStore.MediaColumns._ID)); Uri baseUri = Uri.parse("content://media/external/images/media"); return Uri.withAppendedPath(baseUri, "" + id); } else { if (imageFile.exists()) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA, filePath); return context.getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); } else { return null; } } } public static boolean containsEmoji(String source) { int len = source.length(); for (int i = 0; i < len; i++) { char codePoint = source.charAt(i); if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情 return true; } } return false; } /** * 判断是否是Emoji * * @param codePoint 比较的单个字符 * @return */ private static boolean isEmojiCharacter(char codePoint) { return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); } @Override public void onPermissionsGranted(int requestCode, List perms) { } @Override public void onPermissionsDenied(int requestCode, List perms) { } @AfterPermissionGranted(RC_ALBUM_PERM) public void permissionTask() { if (isPermissionOK()) { callGallery(); // Have permission, do the thing! // Toast.makeText(this, "TODO: Camera things", Toast.LENGTH_LONG).show(); // ifTimeout(); } else { // Ask for one permission EasyPermissions.requestPermissions( this, "充电桩想要获取您的图片读取权限,是否允许?", RC_ALBUM_PERM, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE); } } private boolean isPermissionOK() { return EasyPermissions.hasPermissions(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE ); } }