package com.electric.chargingpile.activity; import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; 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.support.v7.app.AlertDialog; import android.text.Editable; import android.text.Html; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; 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.AuthSignBean; import com.electric.chargingpile.data.ChatRecommendBean; import com.electric.chargingpile.data.PhotoUploadResult; import com.electric.chargingpile.data.PublishItemSerializable; import com.electric.chargingpile.data.UploadPic; import com.electric.chargingpile.manager.ProfileManager; import com.electric.chargingpile.util.BarColorUtil; import com.electric.chargingpile.util.Base64; import com.electric.chargingpile.util.Bimp; import com.electric.chargingpile.util.CommonParams; import com.electric.chargingpile.util.DateUtils; import com.electric.chargingpile.util.DensityUtil; import com.electric.chargingpile.util.ImageItem; import com.electric.chargingpile.util.JsonUtils; import com.electric.chargingpile.util.LoadingDialog; import com.electric.chargingpile.util.PublicWay; import com.electric.chargingpile.util.Res; import com.electric.chargingpile.util.ToastUtil; import com.electric.chargingpile.util.Util; import com.electric.chargingpile.view.LoggerDefault; import com.google.gson.Gson; import com.luck.picture.lib.tools.ScreenUtils; import com.umeng.analytics.MobclickAgent; import com.upyun.library.common.ParallelUploader; import com.upyun.library.common.UploadEngine; import com.upyun.library.listener.UpCompleteListener; import com.upyun.library.listener.UpProgressListener; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.StringCallback; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.jpush.android.api.JPushInterface; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import me.iwf.photopicker.PhotoPicker; import okhttp3.Call; import pub.devrel.easypermissions.AfterPermissionGranted; import pub.devrel.easypermissions.EasyPermissions; /** * @desc : 发布话题 */ public class PublishPicTopicActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks { private static final String TAG = "PublishPicTopicActivity"; private static final int PIC_NUM = 9; private ImageView ivBack; private TextView tv_right; private static String PHOTO_FILE_NAME = ""; private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz"); private GridView noScrollgridview; private PopupWindow pop = null; private LinearLayout ll_popup; private File tempFile; Bitmap bm = null; 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 GridAdapter adapter; private EditText et_context; private TextView tvSubmit; private ImageView point; private ImageView mPublishTopicDe; private TextView tv_point; private RelativeLayout rl_point; private android.view.animation.Animation animation; InputMethodManager imm; private String userContact; private LinearLayout ll_contact; List list; String json; LoadingDialog dialog; private ProgressDialog insertDialog; private static final int RC_ALBUM_PERM = 123; private int screenWidth; private int itemWidth; private TextView publishtopic_choose_topic, mPublishtopicChooseTopic, publishtopic_word_num; private String topicId = ""; //空间名 public static String SPACE = "d1evcom01-fs"; private String policy = ""; private String OPERATER = "d1evvideo01"; @SuppressLint("SdCardPath") private ParallelUploader parallelUploader; private ProgressDialog uploadDialog; private PublishItemSerializable intentData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_publish_picture_content); BarColorUtil.initStatusBarColor(PublishPicTopicActivity.this); initView(); Res.init(this); PublicWay.activityList.add(this); long appTime1 = System.currentTimeMillis() / 1000; PHOTO_FILE_NAME = "android" + appTime1 + ".jpg"; tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME); dialog = new LoadingDialog(this); dialog.setCanceledOnTouchOutside(false); Init(); initYouPaiYun(); } /** * 初始化 又拍云 */ private void initYouPaiYun() { //初始化断点续传 (服务端签名可用) if (parallelUploader == null) { parallelUploader = new ParallelUploader(); } //图文路径 // String p = "/d/file/liaoliao/img/" + y + "/" + m + "/" + d; //视频路径 // p = "/d/file/liaoliao/video/" + y + "/" + m + "/" + d; } private void initView() { intentData = (PublishItemSerializable) getIntent().getSerializableExtra("intent_data"); screenWidth = ScreenUtils.getScreenWidth(this); itemWidth = (int) ((screenWidth - DensityUtil.dip2px(this, 15 * 2 + 10 * 2)) / 3f); uploadDialog = new ProgressDialog(this); uploadDialog.setMessage("图片上传中..."); uploadDialog.setCanceledOnTouchOutside(false); mPublishTopicDe = (ImageView) findViewById(R.id.publishtopic_choose_topic_de); mPublishTopicDe.setOnClickListener(this); mPublishtopicChooseTopic = (TextView) findViewById(R.id.publishtopic_choose_topic); publishtopic_choose_topic = (TextView) findViewById(R.id.publishtopic_choose_topic); publishtopic_word_num = (TextView) findViewById(R.id.publishtopic_word_num); publishtopic_choose_topic.setOnClickListener(this); insertDialog = new ProgressDialog(this); insertDialog.setMessage("正在插入图片..."); insertDialog.setCanceledOnTouchOutside(false); tv_right = (TextView) findViewById(R.id.tv_right); tv_right.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (imm.isActive()) { view = getWindow().peekDecorView(); if (view != null) { imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } } // dialog.show(); uploadDialog.show(); //获取又拍云数据 getYouPaiData(); } }); rl_point = (RelativeLayout) findViewById(R.id.rl_point); tv_point = (TextView) findViewById(R.id.tv_point); animation = AnimationUtils.loadAnimation(PublishPicTopicActivity.this, R.anim.nn); point = (ImageView) findViewById(R.id.tv_one); ivBack = (ImageView) findViewById(R.id.iv_back); ivBack.setOnClickListener(this); et_context = (EditText) findViewById(R.id.et_context); et_context.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { Log.d(TAG, "onFocusChange: "); } }); et_context.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { String s = et_context.getText().toString().trim(); if (s.length() > 500) { et_context.setText(s.subSequence(0, 500)); et_context.setSelection(500); } // if (containsEmoji(s)) { // tv_right.setEnabled(false); // tv_right.setTextColor(getResources().getColor(R.color.ui_68)); // ToastUtil.showToast(getApplicationContext(), "不支持输入表情", Toast.LENGTH_SHORT); // return; // } // if (s.length() > 500) { // tv_right.setEnabled(false); // tv_right.setBackgroundColor(Color.parseColor("color_9ed3ae")); //// tv_right.setTextColor(getResources().getColor(R.color.ui_68)); // ToastUtil.showToast(getApplicationContext(), "输入字数不能超过500", Toast.LENGTH_SHORT); // return; // } // if (!s.trim().isEmpty() && s.length() > 0 && null != Bimp.tempSelectBitmap && Bimp.tempSelectBitmap.size() > 0) { // tv_right.setEnabled(true); // tv_right.setBackgroundColor(Color.parseColor("#02b637")); // } else { // tv_right.setEnabled(false); // tv_right.setBackgroundColor(Color.parseColor("#9ed3ae")); // } if (TextUtils.isEmpty(s)) publishtopic_word_num.setText("0"); else publishtopic_word_num.setText(s.length() + ""); } }); imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (intentData.getFrom().equals(PublishItemsActivity.FROM_TOPIC_DETAIL)) { chatRecommendBean = new ChatRecommendBean(); chatRecommendBean.topicId = Long.parseLong(intentData.getTopicId()); mPublishtopicChooseTopic.setText(intentData.getName()); mPublishTopicDe.setVisibility(View.VISIBLE); } } private void getYouPaiData() { if (null == Bimp.tempSelectBitmap) return; String fileNames = ""; for (int i = 0; i < Bimp.tempSelectBitmap.size(); i++) { ImageItem imageItem = Bimp.tempSelectBitmap.get(i); // String fileNameDir = Bimp.tempSelectBitmap.get(i).getImagePath(); // String fileName = fileNameDir.substring(fileNameDir.lastIndexOf("/") + 1); if (TextUtils.isEmpty(fileNames)) { fileNames = imageItem.fName; } else { fileNames += "," + imageItem.fName; } } String url = MainApplication.urlNew + "/topic/sign.do"; Map map = new HashMap<>(); map.put("fileNames", fileNames); map.put("targetType", ChatRecommendBean.TARGET_TYPE_IMAGE_TEXT + ""); CommonParams.addCommonParams(map); OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() { @Override public void onError(Call call, Exception e) { uploadDialog.dismiss(); ToastUtil.showToast(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT); } @Override public void onResponse(String response) { String code = JsonUtils.getKeyResult(response, "code"); String desc = JsonUtils.getKeyResult(response, "desc"); if ("1000".equals(code)) { String data = JsonUtils.getKeyResult(response, "data"); ArrayList signBeans = (ArrayList) JsonUtils.parseToObjectList(data, AuthSignBean.class); if (null != signBeans && signBeans.size() > 0) { publishCount = signBeans.size(); for (int i = 0; i < publishCount; i++) { String sign = signBeans.get(i).sign; String policy = signBeans.get(i).policy; formUpload(Bimp.tempSelectBitmap.get(i).getImagePath(), sign, policy); } } } else if ("8010".equals(code)) { uploadDialog.dismiss(); startActivity(new Intent(getApplicationContext(), LoginActivity.class)); ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT); } else { uploadDialog.dismiss(); ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT); } } }); } private ArrayList publishArray = new ArrayList<>(); private int publishCount = 0; final int reqTopic = 100; @Override public void onClick(View v) { switch (v.getId()) { case R.id.publishtopic_choose_topic_de: // 取消选择的话题 mPublishtopicChooseTopic.setText("# 选择话题"); mPublishTopicDe.setVisibility(View.GONE); chatRecommendBean = null; break; case R.id.publishtopic_choose_topic: // 选择话题 startActivityForResult(new Intent(this, TopicActivity.class), reqTopic); break; case R.id.iv_back: if (imm.isActive()) { View view = getWindow().peekDecorView(); if (view != null) { imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } } showDialogToExit(); break; } } ChatRecommendBean chatRecommendBean = null; @Override protected void onPause() { super.onPause(); // requestManager.removeOnRequestFinishedListener(this); MobclickAgent.onPause(this); } @Override protected void onResume() { super.onResume(); // requestManager.addOnRequestFinishedListener(this); MobclickAgent.onResume(this); } private File getFile(String path) { File f = new File(path); if (!f.exists()) { try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } return f; } private static String getPath(String path) { File f = new File(path); if (!f.exists()) { f.mkdirs(); } return f.getAbsolutePath(); } private boolean hasSdcard() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return true; } else { return false; } } public void Init() { pop = new PopupWindow(PublishPicTopicActivity.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 OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub pop.dismiss(); ll_popup.clearAnimation(); } }); bt1.setOnClickListener(new OnClickListener() { public void onClick(View v) { pop.dismiss(); ll_popup.clearAnimation(); if (MainScanActivity.isCameraUseable()) { photo(); } else { ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT); } } }); bt2.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(PublishPicTopicActivity.this, AlbumActivityFeedback.class); startActivity(intent); overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out); pop.dismiss(); ll_popup.clearAnimation(); } }); bt3.setOnClickListener(new OnClickListener() { 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) { imm.hideSoftInputFromWindow(arg1.getWindowToken(), 0); if (arg2 == Bimp.tempSelectBitmap.size()) { permissionTask(); } else { Intent intent = new Intent(PublishPicTopicActivity.this, GalleryActivityFeedback.class); intent.putExtra("position", "1"); intent.putExtra("type", "1"); intent.putExtra("ID", arg2); startActivity(intent); } } }); } /** * 调用图库选择 */ private void callGallery() { Log.e(TAG, "callGallery: " + (Bimp.max - Bimp.tempSelectBitmap.size())); //调用第三方图库选择 PhotoPicker.builder() .setPhotoCount(PIC_NUM - Bimp.tempSelectBitmap.size())//可选择图片数量 .setShowCamera(true)//是否显示拍照按钮 .setShowGif(true)//是否显示动态图 .setPreviewEnabled(true)//是否可以预览 .start(this, PhotoPicker.REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == reqTopic && resultCode == -100) { chatRecommendBean = (ChatRecommendBean) data.getSerializableExtra("topic"); if (chatRecommendBean != null) { mPublishtopicChooseTopic.setText(Html.fromHtml(chatRecommendBean.name)); mPublishTopicDe.setVisibility(View.VISIBLE); } } if (resultCode == RESULT_OK) { if (data != null) { if (requestCode == 1) { //处理调用系统图库 } else if (requestCode == PhotoPicker.REQUEST_CODE) { //异步方式插入图片 insertImagesSync(data); } } } } /** * 异步方式插入图片 * * @param data */ private void insertImagesSync(final Intent data) { insertDialog.show(); Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter subscriber) throws Exception { try { ArrayList photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS); //可以同时插入多张图片 int i = 0; for (String imagePath : photos) { i++; Log.e(TAG, "call: imagePath " + imagePath); Bitmap bitmap = BitmapFactory.decodeFile(imagePath);//压缩图片 bitmap = imageZoom(bitmap); ImageItem takePhoto = new ImageItem(); String deviceId = JPushInterface.getUdid(MainApplication.context); takePhoto.fName = DateUtils.getSimpleCurrentDate(); if (TextUtils.isEmpty(deviceId)) { takePhoto.fName += "_" + Util.getRandom(15); } else { takePhoto.fName += "_" + deviceId; } takePhoto.fName += "_00" + i; String suffix = imagePath.substring(imagePath.lastIndexOf(".") + 1); takePhoto.fName += "." + suffix; takePhoto.setBitmap(bitmap); takePhoto.setImagePath(imagePath); Bimp.tempSelectBitmap.add(takePhoto); subscriber.onNext(imagePath); } subscriber.onComplete(); } catch (Exception e) { e.printStackTrace(); subscriber.onError(e); } } }) .subscribeOn(Schedulers.io())//生产事件在io .observeOn(AndroidSchedulers.mainThread())//消费事件在UI线程 .subscribe(new Observer() { @Override public void onComplete() { Log.e(TAG, "onCompleted: -------------"); insertDialog.dismiss(); adapter.update(); } @Override public void onError(Throwable e) { insertDialog.dismiss(); Log.e(TAG, "onError: " + "图片插入失败:" + e.getMessage()); ToastUtil.showToast(getApplicationContext(), "图片插入失败", Toast.LENGTH_SHORT); } @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String imagePath) { } }); } 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() == 9) { return 9; } return (Bimp.tempSelectBitmap.size() + 1); } public Object getItem(int arg0) { return null; } public long getItemId(int arg0) { return 0; } public void setSelectedPosition(int position) { selectedPosition = position; } public int getSelectedPosition() { return selectedPosition; } public View getView(final int position, View convertView, ViewGroup parent) { GridAdapter.ViewHolder holder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.item_publish_picture, parent, false); holder = new GridAdapter.ViewHolder(); holder.image = (ImageView) convertView .findViewById(R.id.item_publish_image); holder.imageDelete = convertView.findViewById(R.id.item_publish_image_delete); convertView.setTag(holder); } else { holder = (GridAdapter.ViewHolder) convertView.getTag(); } RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.image.getLayoutParams(); params.width = itemWidth; params.height = itemWidth; if (position % 3 != 0) { params.leftMargin = DensityUtil.dip2px(getApplicationContext(), 10); } holder.image.setLayoutParams(params); if (position == Bimp.tempSelectBitmap.size()) { holder.imageDelete.setVisibility(View.GONE); holder.image.setImageResource(R.drawable.add_picture); holder.image.setScaleType(ImageView.ScaleType.CENTER_INSIDE); holder.image.setBackgroundColor(Color.parseColor("#f5f5f5")); if (position == 9) { holder.image.setVisibility(View.GONE); } } else { holder.imageDelete.setVisibility(View.VISIBLE); holder.image.setImageBitmap(Bimp.tempSelectBitmap.get(position).getBitmap()); holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP); holder.image.setBackgroundColor(Color.WHITE); } holder.imageDelete.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Bimp.tempSelectBitmap.remove(position); Bimp.max--; Message message = new Message(); message.what = 1; handler.sendMessage(message); } }); return convertView; } public class ViewHolder { public ImageView image; public ImageView imageDelete; } Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 1: if (null != Bimp.tempSelectBitmap && Bimp.tempSelectBitmap.size() > 0) { tv_right.setEnabled(true); tv_right.setBackgroundColor(Color.parseColor("#02b637")); } else { tv_right.setEnabled(false); tv_right.setBackgroundColor(Color.parseColor("#9ed3ae")); } 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 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 protected void onRestart() { adapter.update(); super.onRestart(); } @Override protected void onDestroy() { super.onDestroy(); Bimp.tempSelectBitmap.clear(); Bimp.max = 0; } 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); return bitmap; } /** * 检测是否有emoji表情 * * @param source * @return */ 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(); } else { 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 ); } /** * 表单上传 * * @param SAMPLE_PIC_FILE * @param sign * @param policyServer */ private void formUpload(String SAMPLE_PIC_FILE, String sign, String policyServer) { File temp = new File(SAMPLE_PIC_FILE); // //进度回调,可为空 UpProgressListener progressListener = new UpProgressListener() { @Override public void onRequestProgress(long bytesWrite, long contentLength) { // bp_form.setProgress((int) ((100 * bytesWrite) / contentLength)); // tv_form.setText((100 * bytesWrite) / contentLength + "%"); Log.e(TAG, (100 * bytesWrite) / contentLength + "%"); Log.e(TAG, bytesWrite + "::" + contentLength); uploadDialog.setProgress((int) (100 * bytesWrite / contentLength)); } }; //结束回调,不可为空 UpCompleteListener completeListener = new UpCompleteListener() { @Override public void onComplete(boolean isSuccess, String result) { // tv_form.setText(isSuccess + ":" + result); Log.e(TAG, isSuccess + result); if (isSuccess) { PhotoUploadResult photoUploadResult = new PhotoUploadResult(result); publishArray.add(photoUploadResult.formatResult()); } if (publishCount == publishArray.size()) { String urls = ""; for (int i = 0; i < publishArray.size(); i++) { if (TextUtils.isEmpty(urls)) urls = publishArray.get(i); else urls = urls + "," + publishArray.get(i); } requestPublishServer("[" + urls + "]"); } } }; //表单上传(服务器签名方式) UploadEngine.getInstance().formUpload(temp, policyServer, OPERATER, sign, completeListener, progressListener); } private void requestPublishServer(String urls) { String url = MainApplication.urlNew + "/topic/publish.do"; Map map = new HashMap<>(); map.put("content", et_context.getText().toString().trim()); map.put("urls", Base64.encode(urls.getBytes()).replaceAll("\\s*", "")); if (chatRecommendBean != null) { map.put("topicId", chatRecommendBean.topicId + ""); } map.put("targetType", ChatRecommendBean.TARGET_TYPE_IMAGE_TEXT + ""); CommonParams.addCommonParams(map); OkHttpUtils.post().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() { @Override public void onError(Call call, Exception e) { uploadDialog.dismiss(); dialog.cancel(); publishArray.clear(); publishCount = 0; ToastUtil.showToast(getApplicationContext(), "发布失败,请重试", Toast.LENGTH_SHORT); } @Override public void onResponse(String response) { uploadDialog.dismiss(); dialog.cancel(); publishArray.clear(); publishCount = 0; String code = JsonUtils.getKeyResult(response, "code"); String desc = JsonUtils.getKeyResult(response, "desc"); if ("1000".equals(code)) { // 图文发布成功 ToastUtil.showToast(getApplicationContext(), "发布成功", Toast.LENGTH_SHORT); if (intentData.getFrom().equals(PublishItemsActivity.FROM_CHAT_HOME)) { startActivity(new Intent(getApplicationContext(), ChatActivity.class)); } else { startActivity(new Intent(getApplicationContext(), TopicDetailActivity.class)); } } else { ToastUtil.showToast(getApplicationContext(), desc, Toast.LENGTH_SHORT); } } }); } private void showDialogToExit() { String s = et_context.getText().toString().trim(); if (s.length() > 0 || Bimp.tempSelectBitmap.size() > 0) { AlertDialog.Builder builder = new AlertDialog.Builder(PublishPicTopicActivity.this); builder.setTitle("离开发布页"); builder.setMessage("小主您是否要离开发布页呢?"); builder.setCancelable(false); builder.setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { MobclickAgent.onEvent(getApplicationContext(), "1022"); finish(); } }); builder.setNegativeButton("继续编辑", null); builder.create().show(); } else { MobclickAgent.onEvent(getApplicationContext(), "1022"); finish(); } } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { showDialogToExit(); return true; } return false; } }