android照相及照片上传
16lz
2022-04-20
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 ;
}
}
}
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 ;
}
}
}
更多相关文章
- 两种方式使用android时间和日期控件
- Android跳转WIFI界面的四种方式
- Android(安卓)studio配置NDK问题小结
- Android桌面快捷方式的实现
- Android(安卓)扫描音乐文件、两种方式获取文件最新修改时间
- android webview file标签点击弹出选择文件或拍照菜单
- Android(安卓)存储文件数据与读出文件数据
- android对话框弹出方式动画
- android 以httpclient方式把数据提交到服务器