`
helloandroid
  • 浏览: 275879 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
107f8db3-b009-3b79-938a-dafddb49ea79
Android腾讯微博客户...
浏览量:95739
社区版块
存档分类
最新评论

android照相及照片上传

阅读更多



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
分享到:
评论
6 楼 423884605 2013-05-21  
能给一个demo吗 谢了 362686728@qq.com
5 楼 zgycsmb 2011-12-15  

大家好,android中上传图片到服务器中的功能,哪位有例子吗,求发一份给我
350038760@qq.com
多谢
4 楼 浦南镇 2011-11-25  
helloandroid 写道
浦南镇 写道
膜拜楼主,请问我想做一个客户端修改头像的功能,最后要传到服务器,能给一个具体的代码吗?万分感谢!



http://open.t.qq.com/api/user/update_head?format=json&pic=img这个地址是更新头像的。




很感谢你的回答,但是我做的不是qq客户端,我做的客户端是用webserice和数据库相连的,想实现上传图片(包括头像)功能
3 楼 helloandroid 2011-11-24  
浦南镇 写道
膜拜楼主,请问我想做一个客户端修改头像的功能,最后要传到服务器,能给一个具体的代码吗?万分感谢!



http://open.t.qq.com/api/user/update_head?format=json&pic=img这个地址是更新头像的。
2 楼 浦南镇 2011-11-23  
膜拜楼主,请问我想做一个客户端修改头像的功能,最后要传到服务器,能给一个具体的代码吗?万分感谢!
1 楼 kulmao 2011-10-18  
我咋木有看到PostThread这个方法在哪里?

相关推荐

    Android 照相机裁切图片

    在Android开发中,实现“Android 照相机裁切图片”的功能是常见的需求,尤其是在社交应用或者图片处理类应用中。这个功能允许用户拍摄照片后,根据自己的需要选择并调整图片的展示区域,以便精确地选取想要的部分。...

    Android 录像、照相、录音

    需要考虑读写权限,并遵循Android的存储规范,尤其是在Android 10及以上版本,需处理存储访问框架。 7. **VideoDemo**: 压缩包中的`VideoDemo`可能是示例代码或者应用名称,它可能包含了实现上述功能的Java或...

    android 照相、压缩图片、图片缓存

    5. 图片上传: - 文件选择:允许用户从相册或直接拍摄照片上传,通过ContentResolver获取 Uri。 - 图片裁剪:如需用户裁剪图片,可使用ImageCrop 或 Ucrop 库。 - 文件上传:使用OkHttp或Retrofit等网络库,将...

    delphi xe6 android 调用照相机摄像头拍照片

    在使用Delphi XE6开发Android应用程序时,调用照相机功能是常见的需求,这使得用户可以直接通过应用拍摄照片。本教程将详细讲解如何在Delphi XE6中实现这一功能,无需额外的组件,只需利用系统自带的功能,确保代码...

    delphi xe5 android 调用照相机摄像头拍照片camera

    在使用Delphi XE5开发Android应用程序时,调用照相机功能是常见的需求,以便让用户拍摄照片并集成到应用中。本示例着重讲解如何在Delphi XE5环境下,利用Android API来实现这一功能,无需额外的组件,只通过原生代码...

    android从相册或者照相获取图片,完全实用

    在Android平台上,从相册或相机获取图片是常见的功能,尤其在开发涉及用户头像上传的应用时。这个“实用头像上传工具”针对各种机型进行了优化,确保在小米、华为等不同品牌手机上都能正常工作,并且包含了照片剪裁...

    Android照相或选择图片设置头像Demo

    更新头像可能涉及到网络请求,将图片上传到服务器。 总结,实现"Android照相或选择图片设置头像"功能,开发者需要关注以下几个关键点: 1. 权限管理:请求访问摄像头和外部存储的权限。 2. 创建UI:添加用于拍照和...

    Android自定义照相机实现只拍摄矩形区域(重传)

    在Android开发中,有时我们需要对系统默认的相机功能进行扩展,以满足特定的拍摄需求,例如只拍摄画面中的矩形区域。这样的自定义相机功能可以应用于各种场景,比如二维码扫描、文档拍摄等,确保用户每次拍摄都能...

    Android 调用系统照相机,相册,上传图片

    以上就是Android调用系统照相机、相册及上传图片的基本流程。需要注意的是,对于Android 6.0及以上版本,需要在运行时动态申请权限。同时,图片的处理(如裁剪、压缩)可能会影响应用性能和用户体验,需根据实际需求...

    android 照相机源码 Camera源码

    在Android系统中,照相机功能是用户日常使用的重要部分,深入了解Android照相机的源码有助于开发者优化拍照体验、实现自定义功能或者解决相关问题。本文将深入探讨Android照相机源码,涵盖其核心组件、工作流程以及...

    android调用照相机拍照与选择本地照片功能

    - 如果需要在应用间分享文件,如将图片上传到服务器,Android 7.0及以上版本推荐使用`FileProvider`来生成安全的Uri,以避免安全问题。 9. onActivityResult() 方法: - 这是处理Intent返回结果的关键方法,根据...

    android 简易camera照相机

    在Android平台上,开发一款简易的Camera应用是一项常见的任务。这个"android 简易camera照相机"项目旨在提供一个基础的拍照和预览功能。下面将详细解释如何实现这些功能,以及涉及到的关键知识点。 首先,Android中...

    Android与js交互拍照上传资料

    本篇将深入探讨如何实现Android调用JavaScript接口启动照相机拍照,并将拍摄的照片上传至服务器。 一、Android与JavaScript交互基础 1. WebView组件:Android中的WebView是一个可以加载和显示网页内容的控件,它是...

    Android调用系统照相机并保存

    另外,Android 10及更高版本引入了Scoped Storage,可能需要使用MediaStore API来保存和访问照片。对于不同版本的适配,开发者需要根据具体情况进行处理。在实际开发中,还要考虑异常处理、用户界面设计、权限动态...

    android照相机相册选择,可以多选

    在Android应用开发中,用户经常需要访问设备的相机和相册来获取图片,这通常是社交、分享或上传内容等场景的基础。本项目标题为“android照相机相册选择,可以多选”,说明它实现了在Android平台上让用户能够通过...

    android 照相机

    这段代码首先检查设备上是否存在能处理ACTION_IMAGE_CAPTURE的活动,然后启动该活动,当用户拍摄完照片后,通过`onActivityResult`回调获取拍摄的图片。这种方法的缺点是无法自定义拍照界面,但优点是简单易用,无需...

    android本地图片获取和照相机使用

    在Android开发中,图片的获取和照相机的使用是两个重要的功能模块,广泛应用于各种应用程序,如社交网络、相册应用等。以下是对这两个知识点的详细讲解。 首先,我们来看如何在Android中获取本地图片: 1. **...

    仿微信、QQ实现多图照片上传、照相,照片预览

    在IT行业中,尤其是在移动应用开发领域,实现类似微信和QQ的多图照片上传、照相以及照片预览功能是一项常见的需求。这些功能涉及到用户界面设计、图像处理、数据存储和网络通信等多个技术层面。以下是对这些知识点的...

    android安卓app 照相+上传,录音+上传,录视频+上传(全套源代码).zip

    android安卓app 照相+上传,录音+上传,录视频+上传(全套源代码).zip 浏览图库选择照片+上传

    调用系统照相机拍摄照片并管理,Okhttp上传至后台

    以上代码展示了如何在Android应用中调用系统相机、处理图片、保存到外部存储以及使用OkHttp上传图片到服务器的基本流程。请注意,实际项目中还需要处理各种异常情况,如权限问题、网络错误等,同时需要根据服务器API...

Global site tag (gtag.js) - Google Analytics