Android 调用系统相机拍照、以及相册。完成之后图片是上传到app上。前面的功能已经测试过了。没有上传到服务器,因为我没服务器测试。但项目里面有个类可以参考上传图片到服务器,我就没测试了。接下来看代码,虽然注释写得少,但其作用看英文单词意思,又在或是查看调用。
项目源码下载地址:
http://download.csdn.net/detail/qq_16064871/8585169

转载请注明出处: http://blog.csdn.net/qq_16064871

package com.example.takephotodemo;import java.io.File;import java.io.IOException;import android.media.ExifInterface;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.PopupWindow;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private ImageView mimageViewPhotoShow;private PopupWindow mPopupWindow;private View mpopview;private Bitmap photo;private File mPhotoFile;private int CAMERA_RESULT = 100;private int RESULT_LOAD_IMAGE = 200;private String saveDir = Environment.getExternalStorageDirectory().getPath() + "/temp_image";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);InitUI();}private void InitUI() {View buttonChoosePhoto = (Button) findViewById(R.id.buttonChoosePhoto);if (buttonChoosePhoto != null) {buttonChoosePhoto.setOnClickListener(this);}mimageViewPhotoShow = (ImageView) findViewById(R.id.imageViewPhotoShow);}@Overridepublic void onClick(View arg0) {if (arg0.getId() == R.id.buttonChoosePhoto) {LayoutInflater inflater = LayoutInflater.from(this);mpopview = inflater.inflate(R.layout.layout_login_choose_photo,null);mPopupWindow = new PopupWindow(mpopview, 300, 400, true);mPopupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.tekephoto_dialog_background));mPopupWindow.showAtLocation(mimageViewPhotoShow, Gravity.CENTER, 0,0);Button mbuttonTakePhoto = (Button) mpopview.findViewById(R.id.button_take_photo);Button mbuttonChoicePhoto = (Button) mpopview.findViewById(R.id.button_choice_photo);Button mbuttonChoicecannce = (Button) mpopview.findViewById(R.id.button_choice_cancer);// 相册上传mbuttonChoicePhoto.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mPopupWindow.dismiss();Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(i, RESULT_LOAD_IMAGE);}});File savePath = new File(saveDir);if (!savePath.exists()) {savePath.mkdirs();}// 拍照上传mbuttonTakePhoto.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mPopupWindow.dismiss();destoryImage();String state = Environment.getExternalStorageState();if (state.equals(Environment.MEDIA_MOUNTED)) {mPhotoFile = new File(saveDir, "temp.jpg");mPhotoFile.delete();if (!mPhotoFile.exists()) {try {mPhotoFile.createNewFile();} catch (IOException e) {e.printStackTrace();Toast.makeText(getApplication(), "照片创建失败!",Toast.LENGTH_LONG).show();return;}}Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(mPhotoFile));startActivityForResult(intent, CAMERA_RESULT);} else {Toast.makeText(getApplication(), "sdcard无效或没有插入!",Toast.LENGTH_SHORT).show();}}});mbuttonChoicecannce.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmPopupWindow.dismiss();}});}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == CAMERA_RESULT && resultCode == RESULT_OK) {if (mPhotoFile != null && mPhotoFile.exists()) {BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();bitmapOptions.inSampleSize = 8;int degree = readPictureDegree(mPhotoFile.getAbsolutePath());Bitmap bitmap = BitmapFactory.decodeFile(mPhotoFile.getPath(),bitmapOptions);bitmap = rotaingImageView(degree, bitmap);mimageViewPhotoShow.setImageBitmap(bitmap);}}if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK&& null != data) {Uri selectedImage = data.getData();String[] filePathColumn = { MediaStore.Images.Media.DATA };Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);cursor.moveToFirst();int columnIndex = cursor.getColumnIndex(filePathColumn[0]);String picturePath = cursor.getString(columnIndex);cursor.close();mimageViewPhotoShow.setImageBitmap(BitmapFactory.decodeFile(picturePath));}}private static int readPictureDegree(String path) {int degree = 0;try {ExifInterface exifInterface = new ExifInterface(path);int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);switch (orientation) {case ExifInterface.ORIENTATION_ROTATE_90:degree = 90;break;case ExifInterface.ORIENTATION_ROTATE_180:degree = 180;break;case ExifInterface.ORIENTATION_ROTATE_270:degree = 270;break;}} catch (IOException e) {e.printStackTrace();}return degree;}private static Bitmap rotaingImageView(int angle, Bitmap bitmap) {// 旋转图片 动作Matrix matrix = new Matrix();matrix.postRotate(angle);System.out.println("angle2=" + angle);// 创建新的图片Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), matrix, true);return resizedBitmap;}@Overrideprotected void onDestroy() {destoryImage();super.onDestroy();}private void destoryImage() {if (photo != null) {photo.recycle();photo = null;}}}


activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ScrollView        android:id="@+id/scrollView1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1" >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="vertical"            android:paddingTop="20dp" >            <LinearLayout                android:layout_width="match_parent"                android:layout_height="match_parent"                android:gravity="center"                android:orientation="vertical" >                <ImageView                    android:id="@+id/imageViewPhotoShow"                    android:layout_width="150dp"                    android:layout_height="150dp"                    android:layout_weight="1" />            </LinearLayout>            <LinearLayout                android:layout_width="match_parent"                android:layout_height="match_parent"                android:gravity="center"                 android:paddingTop="20dp"                android:orientation="vertical" >                <Button                    android:id="@+id/buttonChoosePhoto"                    android:layout_width="100dp"                    android:layout_height="40dp"                    android:background="@drawable/btn_takephoto_background"                    android:text="选择头像"                    android:textColor="#eee"                    android:textSize="16sp" />            </LinearLayout>        </LinearLayout>    </ScrollView></LinearLayout>


layout_login_choose_photo.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/textchoice"        android:layout_width="wrap_content"        android:layout_height="40dp"        android:layout_gravity="center_horizontal"        android:gravity="center"        android:text="请选择获取头像方式:"        android:textAppearance="?android:attr/textAppearanceMedium"        android:textSize="16sp" />    <Button        android:id="@+id/button_take_photo"        android:layout_width="match_parent"        android:layout_height="40dp"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="5dp"        android:background="@drawable/btn_takephoto_background"        android:text="拍照"        android:textColor="#eee"        android:textSize="16sp" />    <Button        android:id="@+id/button_choice_photo"        android:layout_width="match_parent"        android:layout_height="40dp"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="10dp"        android:background="@drawable/btn_takephoto_background"        android:text="从相册选择"        android:textColor="#eee"        android:textSize="16sp" />    <Button        android:id="@+id/button_choice_cancer"        android:layout_width="match_parent"        android:layout_height="40dp"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="10dp"        android:background="@drawable/btn_takephoto_background"        android:text="取消"        android:textColor="#eee"        android:textSize="16sp" /></LinearLayout>

NetUtil这个类,我也是参考网上的,没测试过。是图片上传服务器的。

package com.example.takephotodemo;import java.io.BufferedReader;import java.io.File;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.StatusLine;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.mime.MultipartEntity;import org.apache.http.entity.mime.content.FileBody;import org.apache.http.entity.mime.content.StringBody;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;public class NetUtil {/** * 以POST方式提交表单 *  * @param url *            服务器路径 * @param param *            参数键值对 * @return 响应结果 * @throws Exception */public static String doPost(String url, Map<String, Object> param)throws Exception {HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost(url);if (param != null && param.size() > 0) {List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(param.size());Set<String> keys = param.keySet();for (Object o : keys) {String key = (String) o;nameValuePairs.add(new BasicNameValuePair(key, String.valueOf(param.get(key))));}post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));}HttpResponse response = client.execute(post);/** 返回状态 **/int statusCode = response.getStatusLine().getStatusCode();StringBuffer sb = new StringBuffer();if (statusCode == HttpStatus.SC_OK) {HttpEntity entity = response.getEntity();if (entity != null) {InputStream instream = entity.getContent();BufferedReader br = new BufferedReader(new InputStreamReader(instream));String tempLine;while ((tempLine = br.readLine()) != null) {sb.append(tempLine);}}}post.abort();return sb.toString();}/** *  *  * @param url * @param param * @param file * @return  * @throws Exception */private String doPost(String url, Map<String, String> param, File file)throws Exception {HttpPost post = new HttpPost(url);HttpClient client = new DefaultHttpClient();MultipartEntity entity = new MultipartEntity();if (param != null && !param.isEmpty()) {for (Map.Entry<String, String> entry : param.entrySet()) {entity.addPart(entry.getKey(), new StringBody(entry.getValue()));}}// 添加文件参数if (file != null && file.exists()) {entity.addPart("file", new FileBody(file));}post.setEntity(entity);HttpResponse response = client.execute(post);int stateCode = response.getStatusLine().getStatusCode();StringBuffer sb = new StringBuffer();if (stateCode == HttpStatus.SC_OK) {HttpEntity result = response.getEntity();if (result != null) {InputStream is = result.getContent();BufferedReader br = new BufferedReader(new InputStreamReader(is));String tempLine;while ((tempLine = br.readLine()) != null) {sb.append(tempLine);}}}post.abort();return sb.toString();}private String doGet(String url) {StringBuilder sb = new StringBuilder();try {HttpGet get = new HttpGet(url);// HttpPost post = new HttpPost(url);HttpClient client = new DefaultHttpClient();HttpResponse response = client.execute(get);StatusLine state = response.getStatusLine();if (state.getStatusCode() == HttpStatus.SC_OK) {HttpEntity eneity = response.getEntity();BufferedReader br = new BufferedReader(new InputStreamReader(eneity.getContent()));String content;while ((content = br.readLine()) != null) {sb.append(content);}}get.abort();} catch (Exception e) {e.printStackTrace();return sb.toString();}return sb.toString();}}

记得加入权限,权限主要是访问sd存储,以及调用系统相机,相册。上传服务器权限也有了。只是我没服务器测试。

    <uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


项目源码下载地址:http://download.csdn.net/detail/qq_16064871/8585169

转载请注明出处: http://blog.csdn.net/qq_16064871

更多相关文章

  1. 万字长文带你了解最常用的开源 Squid 代理服务器
  2. Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务
  3. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  4. Android消息推送的Androidpn实现方式:(一)下载androidpn服务器端与
  5. APP测试的内容(一)
  6. 关于Android网络传输加密的总结
  7. Android(安卓)HTTP网络通信(一):使用HttpURLConnection、HttpClient
  8. android 测试 --使用sqlite3查看手机数据库系统
  9. android官网译文《CTS Development》-cts的二次开发

随机推荐

  1. android studio 61歌曲服务器搭建 歌曲ap
  2. java.lang.UnsatisfiedLinkError: dlopen
  3. 感觉比较好的学习Android网站
  4. Basic4android 1.8,用 Basic 编写 Android
  5. Android内置倒计时类CountDownTimer
  6. android中得到颜色,图片资源的方式
  7. Android 升级ADT后,NoClassDefFoundError
  8. Android,使用Intent或Bundle传递参数,跳转
  9. android之uniapp原生打包
  10. Android 判断app是否正在播放音乐