package com.hjx.parent; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.NetworkRequest; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.core.content.FileProvider; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.prws.common.base.BaseActivity; import com.prws.common.base.BasePresenter; import com.prws.common.bean.ResponseResult; import com.prws.common.net.NetWorks; import com.prws.common.utils.LogUtil; import com.prws.common.utils.ScreenUtils; import com.prws.common.utils.SharedPreferencesUtil; import org.json.JSONObject; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import butterknife.BindView; import butterknife.OnClick; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import okhttp3.ResponseBody; public class AccountActivity extends BaseActivity { @Override protected int layoutResId() { return R.layout.activity_setac; } @Override public Object getContract() { return null; } @Override public BasePresenter getPresenter() { return null; } private static int CAMERA_REQUEST_CODE = 343; private static int ALBUM_REQUEST_CODE = 456; private static int CROP_REQUEST_CODE = 234; private File tempFile; private String path; TextView tv_6; @BindView(R.id.iv_3) ImageView iv_3; @Override protected void initView() { tv_6 = findViewById(R.id.tv_6); String phone = (String) SharedPreferencesUtil.getData("phone", ""); String photo = (String) SharedPreferencesUtil.getData("photo", ""); if (!TextUtils.isEmpty(photo)) { RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(AccountActivity.this, 45)); RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); Glide.with(AccountActivity.this).load(photo).apply(options).into(iv_3); } if (phone != null && phone.length() > 0) tv_6.setText(phone); } @Override protected void initListener() { findViewById(R.id.iv_back).setOnClickListener(view -> onBackPressed()); findViewById(R.id.tv_7).setOnClickListener(view -> startActivity(ChangePwdActivity.class)); } @Override protected void initData() { } @Override public void onNetChanged(int netWorkState) { } private void uploadAvatar(File file) { NetWorks.uploadAvatar(file, new Observer>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseResult> responseBody) { if (responseBody.getData() != null && responseBody.getCode() == 200) { path = responseBody.getData().get("imageUrl"); editUser(path); } } @Override public void onError(Throwable e) { e.toString(); } @Override public void onComplete() { } }); } public void editUser(String path) { Map map = new HashMap(); map.put("userId", SharedPreferencesUtil.getData("userId", "")); map.put("photo", path); NetWorks.editUser(NetWorks.getMapRequestBody(map), new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseBody responseBody) { try { String str = responseBody.string().toString(); LogUtil.e(TAG, "----" + str); JSONObject jo = new JSONObject(str); boolean isSucceed = jo.getBoolean("success"); if (isSucceed) { SharedPreferencesUtil.putData("photo", path); RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(AccountActivity.this, 45)); RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); Glide.with(AccountActivity.this).load(path).apply(options).into(iv_3); Toast.makeText(AccountActivity.this, "修改成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(AccountActivity.this, jo.getString("msg"), Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); Toast.makeText(AccountActivity.this, "服务繁忙,请重试", Toast.LENGTH_SHORT).show(); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } public File saveImage(String name, Bitmap bmp) { File appDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath()); if (!appDir.exists()) { appDir.mkdir(); } String fileName = name + ".jpg"; File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); return file; } catch (IOException e) { Log.d("dsadsadsa", e.getLocalizedMessage()); e.printStackTrace(); } return null; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == CAMERA_REQUEST_CODE) { if (resultCode == RESULT_OK) { //用相机返回的照片去调用剪裁也需要对Uri进行处理 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Uri contentUri = FileProvider.getUriForFile(this, this.getPackageName() + ".fileprovider", tempFile); cropPhoto(contentUri); } else { cropPhoto(Uri.fromFile(tempFile)); } } } else if (requestCode == ALBUM_REQUEST_CODE) { if (resultCode == RESULT_OK) { Uri uri = intent.getData(); cropPhoto(uri); } } else if (requestCode == CROP_REQUEST_CODE) { if (intent == null) { return; } Bundle bundle = intent.getExtras(); if (bundle != null) { //在这里获得了剪裁后的Bitmap对象,可以用于上传 Bitmap image = bundle.getParcelable("data"); //设置到ImageView上 //也可以进行一些保存、压缩等操作后上传 File file = saveImage("head_output", image); uploadAvatar(file); // Log.d("dsadsadsa",path); } } } private void getPicFromCamera() { //用于保存调用相机拍照后所生成的文件 tempFile = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg"); //跳转到调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //判断版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //如果在Android7.0以上,使用FileProvider获取Uri intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); Uri contentUri = FileProvider.getUriForFile(this, this.getPackageName() + ".fileprovider", tempFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri); } else { //否则使用Uri.fromFile(file)方法获取Uri intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile)); } startActivityForResult(intent, CAMERA_REQUEST_CODE); } private void cropPhoto(Uri uri) { Uri contentUri = Uri.fromFile(new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), System.currentTimeMillis() + ".jpg")); Intent intent = new Intent("com.android.camera.action.CROP"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //Android 7.0需要临时添加读取Url的权限, 添加此属性是为了解决:调用裁剪框时候提示:图片无法加载或者加载图片失败或者无法加载此图片 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true");//发送裁剪信号,去掉也能进行裁剪 intent.putExtra("scale", true);// 设置缩放 intent.putExtra("scaleUpIfNeeded", true);// 去黑边 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); //上述两个属性控制裁剪框的缩放比例。 //当用户用手拉伸裁剪框时候,裁剪框会按照上述比例缩放。 intent.putExtra("outputX", 300);//属性控制裁剪完毕,保存的图片的大小格式。 intent.putExtra("outputY", 300);//你按照1:1的比例来裁剪的,如果最后成像是800*400,那么按照2:1的样式保存, intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//输出裁剪文件的格式 intent.putExtra("return-data", true);//是否返回裁剪后图片的Bitmap intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);//设置输出路径 startActivityForResult(intent, CROP_REQUEST_CODE); } /** * 从相册获取图片 */ private void getPicFromAlbm() { Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); startActivityForResult(photoPickerIntent, ALBUM_REQUEST_CODE); } @OnClick(R.id.iv_3) public void showButtonDialog(View view) { BottomSheetDialog dialog = new BottomSheetDialog(this, R.style.BottomSheetDialog); View bottomView = LayoutInflater.from(this).inflate(R.layout.bottom_sheet_layout, null); dialog.setContentView(bottomView); bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); if (!XXPermissions.isGranted(AccountActivity.this, Permission.CAMERA)) { XXPermissions.with(AccountActivity.this) // 申请多个权限 .permission(Permission.CAMERA) .request(new OnPermissionCallback() { @Override public void onGranted(List permissions, boolean all) { if (all) { //开启扫码界面 getPicFromCamera(); } else { Toast.makeText(AccountActivity.this, "需要相机权限", Toast.LENGTH_SHORT).show(); } } @Override public void onDenied(List permissions, boolean never) { XXPermissions.startPermissionActivity(AccountActivity.this, permissions); } }); } else { getPicFromCamera(); } } }); bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); getPicFromAlbm(); } }); bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } @OnClick(R.id.logout) public void logout(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert); builder.setTitle("温馨提示"); builder.setMessage("是否退出登录?"); builder.setCancelable(false); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { SharedPreferencesUtil.clear(AccountActivity.this); restartApp(); } }); builder.show(); } private void restartApp() { //重启app,这一步一定要加上,如果不重启app,可能打开新的页面显示的语言会不正确 Intent intent = new Intent(this, SmsLoginActivity.class); intent.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } }