android照相及照片上传(转载) http://blog.csdn.net/raphael55/article/details/6838018
package com.android.cist.camera.view;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.android.cist.R;
import com.android.cist.network.HttpUtil;
import com.android.cist.network.form.FormFile;
import com.android.cist.network.form.HttpFormUtil;
import com.android.cist.util.ApplicationUtil;
import com.android.cist.util.ImageUtil;

public class CameraActivity extends Activity implements OnClickListener{
private ImageViewpreview;
private EditTextcarNo;
private EditTextaddres;
private EditTexttype;
private Buttonback;
private Buttonsubmit;
private Buttoncapture;
private ButtonreCapture;
private OnClickListenerimgViewListener;
private BitmapmyBitmap;
private byte []mContent;
private Handlerhandler;
StringreturnString;
private CalendarViewhappenDate;
private static final int REQUEST_CAMERA = 1 ;
private static final int REQUEST_CALENDAR = 2 ;

@Override
public void onCreate(BundlesavedInstanceState)
{
super .onCreate(savedInstanceState);
setContentView(R.layout.camera);
setUpViews();
setUpListeners();
ApplicationUtil.getInstance().addActivity(
this );
}

@Override
protected void onActivityResult( int requestCode, int resultCode,Intentdata)
{
super .onActivityResult(requestCode,resultCode,data);

ContentResolverresolver
= getContentResolver();
/**
*因为两种方式都用到了startActivityForResult方法,
*这个方法执行完后都会执行onActivityResult方法,所以为了区别到底选择了那个方式获取图片要进行判断,
*这里的requestCode跟startActivityForResult里面第二个参数对应
*/
if (requestCode == 0 )
{
try
{
// 获得图片的uri
UrioriginalUri = data.getData();
// 将图片内容解析成字节数组
mContent = readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
// 将字节数组转换为ImageView可调用的Bitmap对象
myBitmap = getPicFromBytes(mContent, null );
// // 把得到的图片绑定在控件上显示
preview.setImageBitmap(myBitmap);
}
catch (Exceptione)
{
System.out.println(e.getMessage());
}

}
else if (requestCode == REQUEST_CAMERA){
try
{
super .onActivityResult(requestCode,resultCode,data);
Bundleextras
= data.getExtras();
myBitmap
= (Bitmap)extras.get( " data " );
ByteArrayOutputStreambaos
= new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG,
100 ,baos);
mContent
= baos.toByteArray();
}
catch (Exceptione)
{
e.printStackTrace();
}
// 把得到的图片绑定在控件上显示
preview.setImageBitmap(ImageUtil.toRoundCorner(myBitmap, 10 )); // 把拍摄的照片转成圆角显示在预览控件上
} else if (requestCode == REQUEST_CALENDAR){
if (resultCode == RESULT_OK){
happenDate.setCalendar(data.getIntExtra(
" year " , 1900 ),data.getIntExtra( " month " , 0 ),data.getIntExtra( " day " , 1 ));
}
}
}

public static BitmapgetPicFromBytes( byte []bytes,BitmapFactory.Optionsopts)
{
if (bytes != null )
if (opts != null )
return BitmapFactory.decodeByteArray(bytes, 0 ,bytes.length,opts);
else
return BitmapFactory.decodeByteArray(bytes, 0 ,bytes.length);
return null ;
}

public static byte []readStream(InputStreaminStream) throws Exception
{
byte []buffer = new byte [ 1024 ];
int len = - 1 ;
ByteArrayOutputStreamoutStream
= new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != - 1 )
{
outStream.write(buffer,
0 ,len);
}
byte []data = outStream.toByteArray();
outStream.close();
inStream.close();
return data;
}

@Override
public void onClick(Viewv){
int id = v.getId();
switch (id){
case R.id.capture:{
final CharSequence[]items =
{
" 相册 " , " 拍照 " };
AlertDialogdlg
= new AlertDialog.Builder(CameraActivity. this ).setTitle( " 选择图片 " ).setItems(items,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterfacedialog, int item)
{
// 这里item是根据选择的方式,
// 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
if (item == 1 ){
IntentgetImageByCamera
= new Intent( " android.media.action.IMAGE_CAPTURE " );
startActivityForResult(getImageByCamera,REQUEST_CAMERA);
}
else {
IntentgetImage
= new Intent(Intent.ACTION_GET_CONTENT);
getImage.addCategory(Intent.CATEGORY_OPENABLE);
getImage.setType(
" image/jpeg " );
startActivityForResult(getImage,
0 );
}
}
}).create();
dlg.show();
}
break ;
/* caseR.id.reCapture:{
finalCharSequence[]items=
{"相册","拍照"};
AlertDialogdlg=newAlertDialog.Builder(CameraActivity.this).setTitle("选择图片").setItems(items,
newDialogInterface.OnClickListener()
{
publicvoidonClick(DialogInterfacedialog,intitem)
{
//这里item是根据选择的方式,
//在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
if(item==1)
{
IntentgetImageByCamera=newIntent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera,1);
}else
{
IntentgetImage=newIntent(Intent.ACTION_GET_CONTENT);
getImage.addCategory(Intent.CATEGORY_OPENABLE);
getImage.setType("image/jpeg");
startActivityForResult(getImage,0);
}
}
}).create();
dlg.show();
}
break;
*/
case R.id.submit:{
new PostThread().start(); // 开启线程提交数据
}
break ;
case R.id.back:{
CameraActivity.
this .finish(); // 返回,销毁当前Activity
}
break ;
default :
break ;
}
}

}

更多相关文章

  1. 两种方式使用android时间和日期控件
  2. Android跳转WIFI界面的四种方式
  3. Android(安卓)studio配置NDK问题小结
  4. Android桌面快捷方式的实现
  5. Android(安卓)扫描音乐文件、两种方式获取文件最新修改时间
  6. android webview file标签点击弹出选择文件或拍照菜单
  7. Android(安卓)存储文件数据与读出文件数据
  8. android对话框弹出方式动画
  9. android 以httpclient方式把数据提交到服务器

随机推荐

  1. APP管理应用的内存
  2. Android(安卓)使用V4包的Fragment遇到的
  3. Android(安卓)No active compatible AVD'
  4. Android(安卓)1000实例代码集结(三 )
  5. Android的新建和目录介绍
  6. 改写百度云推送SDK,PHP PEAR 包:Services_B
  7. 解决android opengl glReadPixels 慢的问
  8. 为Android应用程序添加社会化分享功能
  9. Android开罐头———外部存储与内部存储
  10. Android(安卓)自定义数字选择器,可以根据