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 ImageView preview;
private EditText carNo;
private EditText addres;
private EditText type;
private Button back;
private Button submit;
private Button capture;
private Button reCapture;
private OnClickListener imgViewListener;
private Bitmap myBitmap;
private byte[] mContent;
private Handler handler;
String returnString;
private CalendarView happenDate;
private static final int REQUEST_CAMERA = 1;
private static final int REQUEST_CALENDAR = 2;
@ Override
public void onCreate ( Bundle savedInstanceState )
{
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
setUpViews();
setUpListeners();
ApplicationUtil.getInstance().addActivity(this);
}
@ Override
protected void onActivityResult ( int requestCode , int resultCode , Intent data )
{
super.onActivityResult(requestCode, resultCode, data);
ContentResolver resolver = getContentResolver();
/**
* 因为两种方式都用到了startActivityForResult方法,
* 这个方法执行完后都会执行onActivityResult方法, 所以为了区别到底选择了那个方式获取图片要进行判断,
* 这里的requestCode跟startActivityForResult里面第二个参数对应
*/
if (requestCode == 0)
{
try
{
// 获得图片的uri
Uri originalUri = data.getData();
// 将图片内容解析成字节数组
mContent = readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
// 将字节数组转换为ImageView可调用的Bitmap对象
myBitmap = getPicFromBytes(mContent, null);
// //把得到的图片绑定在控件上显示
preview.setImageBitmap(myBitmap);
} catch ( Exception e )
{
System.out.println(e.getMessage());
}
} else if (requestCode == REQUEST_CAMERA){
try
{
super.onActivityResult(requestCode, resultCode, data);
Bundle extras = data.getExtras();
myBitmap = (Bitmap) extras.get("data");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
mContent = baos.toByteArray();
} catch ( Exception e )
{
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 Bitmap getPicFromBytes ( byte[] bytes , BitmapFactory.Options opts )
{
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 ( InputStream inStream ) throws Exception
{
byte[] buffer = new byte[1024];
int len = -1;
ByteArrayOutputStream outStream = 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(View v) {
int id = v.getId();
switch(id){
case R.id.capture:{
final CharSequence[] items =
{ "相册", "拍照" };
AlertDialog dlg = new AlertDialog.Builder(CameraActivity.this).setTitle("选择图片").setItems(items,
new DialogInterface.OnClickListener()
{
public void onClick ( DialogInterface dialog , int item )
{
// 这里item是根据选择的方式,
// 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
if (item == 1){
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera, REQUEST_CAMERA);
} else{
Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
getImage.addCategory(Intent.CATEGORY_OPENABLE);
getImage.setType("image/jpeg");
startActivityForResult(getImage, 0);
}
}
}).create();
dlg.show();
}
break;
/*case R.id.reCapture:{
final CharSequence[] items =
{ "相册", "拍照" };
AlertDialog dlg = new AlertDialog.Builder(CameraActivity.this).setTitle("选择图片").setItems(items,
new DialogInterface.OnClickListener()
{
public void onClick ( DialogInterface dialog , int item )
{
// 这里item是根据选择的方式,
// 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
if (item == 1)
{
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera, 1);
} else
{
Intent getImage = new Intent(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;
}
}
}
- 大小: 51.4 KB
- 大小: 32.6 KB
分享到:
相关推荐
在Android开发中,实现“Android 照相机裁切图片”的功能是常见的需求,尤其是在社交应用或者图片处理类应用中。这个功能允许用户拍摄照片后,根据自己的需要选择并调整图片的展示区域,以便精确地选取想要的部分。...
需要考虑读写权限,并遵循Android的存储规范,尤其是在Android 10及以上版本,需处理存储访问框架。 7. **VideoDemo**: 压缩包中的`VideoDemo`可能是示例代码或者应用名称,它可能包含了实现上述功能的Java或...
5. 图片上传: - 文件选择:允许用户从相册或直接拍摄照片上传,通过ContentResolver获取 Uri。 - 图片裁剪:如需用户裁剪图片,可使用ImageCrop 或 Ucrop 库。 - 文件上传:使用OkHttp或Retrofit等网络库,将...
在使用Delphi XE6开发Android应用程序时,调用照相机功能是常见的需求,这使得用户可以直接通过应用拍摄照片。本教程将详细讲解如何在Delphi XE6中实现这一功能,无需额外的组件,只需利用系统自带的功能,确保代码...
在Android平台上,从相册或相机获取图片是常见的功能,尤其在开发涉及用户头像上传的应用时。这个“实用头像上传工具”针对各种机型进行了优化,确保在小米、华为等不同品牌手机上都能正常工作,并且包含了照片剪裁...
更新头像可能涉及到网络请求,将图片上传到服务器。 总结,实现"Android照相或选择图片设置头像"功能,开发者需要关注以下几个关键点: 1. 权限管理:请求访问摄像头和外部存储的权限。 2. 创建UI:添加用于拍照和...
在使用Delphi XE5开发Android应用程序时,调用照相机功能是常见的需求,以便让用户拍摄照片并集成到应用中。本示例着重讲解如何在Delphi XE5环境下,利用Android API来实现这一功能,无需额外的组件,只通过原生代码...
在Android开发中,有时我们需要对系统默认的相机功能进行扩展,以满足特定的拍摄需求,例如只拍摄画面中的矩形区域。这样的自定义相机功能可以应用于各种场景,比如二维码扫描、文档拍摄等,确保用户每次拍摄都能...
以上就是Android调用系统照相机、相册及上传图片的基本流程。需要注意的是,对于Android 6.0及以上版本,需要在运行时动态申请权限。同时,图片的处理(如裁剪、压缩)可能会影响应用性能和用户体验,需根据实际需求...
在Android系统中,照相机功能是用户日常使用的重要部分,深入了解Android照相机的源码有助于开发者优化拍照体验、实现自定义功能或者解决相关问题。本文将深入探讨Android照相机源码,涵盖其核心组件、工作流程以及...
- 如果需要在应用间分享文件,如将图片上传到服务器,Android 7.0及以上版本推荐使用`FileProvider`来生成安全的Uri,以避免安全问题。 9. onActivityResult() 方法: - 这是处理Intent返回结果的关键方法,根据...
在Android平台上,开发一款简易的Camera应用是一项常见的任务。这个"android 简易camera照相机"项目旨在提供一个基础的拍照和预览功能。下面将详细解释如何实现这些功能,以及涉及到的关键知识点。 首先,Android中...
本篇将深入探讨如何实现Android调用JavaScript接口启动照相机拍照,并将拍摄的照片上传至服务器。 一、Android与JavaScript交互基础 1. WebView组件:Android中的WebView是一个可以加载和显示网页内容的控件,它是...
另外,Android 10及更高版本引入了Scoped Storage,可能需要使用MediaStore API来保存和访问照片。对于不同版本的适配,开发者需要根据具体情况进行处理。在实际开发中,还要考虑异常处理、用户界面设计、权限动态...
在Android应用开发中,用户经常需要访问设备的相机和相册来获取图片,这通常是社交、分享或上传内容等场景的基础。本项目标题为“android照相机相册选择,可以多选”,说明它实现了在Android平台上让用户能够通过...
这段代码首先检查设备上是否存在能处理ACTION_IMAGE_CAPTURE的活动,然后启动该活动,当用户拍摄完照片后,通过`onActivityResult`回调获取拍摄的图片。这种方法的缺点是无法自定义拍照界面,但优点是简单易用,无需...
在Android开发中,图片的获取和照相机的使用是两个重要的功能模块,广泛应用于各种应用程序,如社交网络、相册应用等。以下是对这两个知识点的详细讲解。 首先,我们来看如何在Android中获取本地图片: 1. **...
在IT行业中,尤其是在移动应用开发领域,实现类似微信和QQ的多图照片上传、照相以及照片预览功能是一项常见的需求。这些功能涉及到用户界面设计、图像处理、数据存储和网络通信等多个技术层面。以下是对这些知识点的...
android安卓app 照相+上传,录音+上传,录视频+上传(全套源代码).zip 浏览图库选择照片+上传
总的来说,实现一个自定义相机涉及多个步骤,包括创建相机界面、初始化相机硬件、处理预览、拍照及照片处理、添加用户交互和处理权限。这个过程中需要注意性能优化,如使用合适的图像格式和尺寸,以及避免内存泄漏。...