Android 相机或者相册上传头像
2016-03-02 14:30
399 查看
package com.og.common; import java.io.File; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.widget.ImageView; import android.widget.Toast; import com.mk.common.MKActivity; import com.og.unite.data.OGSdkUser; import com.og.unite.main.OGIDispatcherCallback; import com.og.unite.main.OGSdkPlatform; public class HeadPortraitActivity extends MKActivity { private static HeadPortraitActivity mInstance; 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 static final int PHOTO_WH = 120; // 图片的宽高值 private ImageView mFace; private Bitmap bitmap; /* 头像名称 */ private static final String PHOTO_FILE_NAME = "temp_photo.jpg"; private File tempFile; @Override public void onCreate(Bundle savedInstanceState) { Log.d("Head", "HeadPortraitActivity onCreate"); mInstance = this; super.onCreate(savedInstanceState); } public static HeadPortraitActivity getInstance() { return mInstance; } public void modifyHeadPortraitByCamera() { MKActivity.getInstance().runOnUiThread(new Runnable() { @Override public void run() { Log.d("Head", "HeadPortraitActivity 111"); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); // 判断存储卡是否可以用,可用进行存储 if (hasSdcard()) { intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment .getExternalStorageDirectory(), PHOTO_FILE_NAME))); } HeadPortraitActivity.getInstance().startActivityForResult(intent, PHOTO_REQUEST_CAMERA); Log.d("Head", "HeadPortraitActivity 222"); } }); } public void modifyHeadPortraitByAlbum() { MKActivity.getInstance().runOnUiThread(new Runnable() { @Override public void run() { Log.d("Head", "HeadPortraitActivity 112"); // 激活系统图库,选择一张图片 Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); HeadPortraitActivity.getInstance().startActivityForResult(intent, PHOTO_REQUEST_GALLERY); Log.d("Head", "HeadPortraitActivity 223"); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PHOTO_REQUEST_GALLERY) { if (data != null) { // 得到图片的全路径 Uri uri = data.getData(); crop(uri); } } else if (requestCode == PHOTO_REQUEST_CAMERA) { if (hasSdcard()) { tempFile = new File(Environment.getExternalStorageDirectory(), PHOTO_FILE_NAME); crop(Uri.fromFile(tempFile)); } else { Toast.makeText(MKActivity.getInstance(), "未找到存储卡,无法存储照片!", 0).show(); } } else if (requestCode == PHOTO_REQUEST_CUT) { try { bitmap = data.getParcelableExtra("data"); //this.mFace.setImageBitmap(bitmap); if(bitmap == null) { Log.d("Head", "bitmap == null"); } <strong>// 在此将 bitmap 对象传到服务器</strong> boolean delete = tempFile.delete(); System.out.println("delete = " + delete); } catch (Exception e) { e.printStackTrace(); } } super.onActivityResult(requestCode, resultCode, data); } private void crop(Uri uri) { // 裁剪图片意图 Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // 裁剪框的比例,1:1 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // 裁剪后输出图片的尺寸大小 intent.putExtra("outputX", PHOTO_WH); intent.putExtra("outputY", PHOTO_WH); // 图片格式 intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); // 取消人脸识别 intent.putExtra("return-data", true); // true:不返回uri false:返回uri startActivityForResult(intent, PHOTO_REQUEST_CUT); } private boolean hasSdcard() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return true; } else { return false; } } }
AndroidManifest.xml 中添加
<activity android:name="com.og.common.HeadPortraitActivity" android:label="@string/app_name" android:screenOrientation="sensorLandscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation|keyboard|keyboardHidden|screenSize"> </activity>
在主 Activity 的 onCreate 方法中启动上述新建的 Activity
Intent it = new Intent(this, com.og.common.HeadPortraitActivity.class); startActivity(it);
PS:如果该Activity作为主Activity, 则需在上述 <activity 中添加启动内容
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
亲测可行
相关文章推荐
- android 在Activity的OnCreate()方法中如何获取view的宽和高
- android 图片加载框架picasso流程解读
- Android Surface(2)
- Android 存储选择
- Android 中 shape、selector与layer_list使用与区别
- android 中xml文件的各种样式的学习
- android: EditText一边输入一边进行判断显示操作,运算复杂时的解决方案
- android 开发技巧(12)--更改 Toast 显示位置的技巧
- Android代码优化小技巧
- Android--Logcat
- Android开发优化之——对Bitmap的内存优化
- Android studio 导入jar包
- Android-配置文件中设置“android:clickable="false"无效的原因及解决办法
- android:TableLayout表格布局详解
- [Android]动态加载/热部署框架汇总
- Android 日常开发总结的技术经验 60 条
- Android 学习资料收集
- Android — — —动态添加碎片
- android ViewDragHelper介绍
- android-Service和Thread的区别