|
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<Intent, ObservableSource<Boolean>>() {
@Override
public ObservableSource<Boolean> apply(Intent intent) throws Exception {
try {
List<Uri> 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<Boolean>() {
@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<Throwable>() {
@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<String, String> par = new HashMap<String, String>();
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<String, String> par = new HashMap<String, String>();
// 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<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, List<String> 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
);
}
}
|