文档章节

android使用系统相机拍照返回照片,并通过webservice上传到服务器上

ForingY
 ForingY
发布于 2016/08/01 11:23
字数 406
阅读 24
收藏 0

如果要在自己的应用中实现拍照的功能,首先要在AndroidManifest.xml文件中添加权限:

<uses-permission android:name="android.permission.CAMERA"/>  

启动相机的方法非常简单,通过intent访问MediaStore.ACTION_IMAGE_CAPTURE

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  // 指定拍照 

String name = new DateFormat().format("yyyyMMddhhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg";
imgName = name;
mFilePath += name;
Uri uri = Uri.fromFile(new File(mFilePath));// 加载路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);// 指定存储路径,这样就可以保存原图了

startActivityForResult(intent, 1);  // 拍照返回图片

拍照并确认后,Activity的onActivityResult方法会被调用,在这里可以获取图片的数据。

/**
     * 拍照返回
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            String sdStatus = Environment.getExternalStorageState();
            if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
                Log.i("TestFile", "SD card is not avaiable/writeable right now.");
                return;
            }
            try {
                is = new FileInputStream(mFilePath);// 获取输入流
                Bitmap bitmap = BitmapFactory.decodeStream(is);// 把流解析成bitmap
                ViewGroup.LayoutParams lp;
                lp = img.getLayoutParams();
                lp.width = 300;
                lp.height = 300 * bitmap.getHeight() / bitmap.getWidth();
                img.setLayoutParams(lp);
                img.setImageBitmap(bitmap);// 将图片显示在ImageView里
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {// 关闭流
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

通过webservice上传图片

 /**
     * 上传图片
     */
    private String imgUpload() {
        try {
            FileInputStream fis = new FileInputStream(mFilePath);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int count = 0;
            while ((count = fis.read(buffer)) >= 0) {
                baos.write(buffer, 0, count);
            }
            String uploadBuffer = new String(Base64.encode(baos.toByteArray()));  //进行Base64编码
            String f = connectWebService(uploadBuffer);
            Log.i("connectWebService", "start");
            fis.close();
            return f;
        } catch (Exception e) {
            e.printStackTrace();
            return "0";
        }
    }

    private String connectWebService(String imageBuffer) {
        SoapObject soapObject = new SoapObject(nameSpace, "uploadImage");
        soapObject.addProperty("flag", "1");            //标识
        soapObject.addProperty("filename", imgName);    // 图片名
        soapObject.addProperty("image", imageBuffer);   // 图片字符串
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = false;
        envelope.bodyOut = soapObject;
        envelope.setOutputSoapObject(soapObject);
        HttpTransportSE httpTranstation = new HttpTransportSE(wsdl);
        try {
            httpTranstation.call("", envelope);
            Object result = envelope.getResponse();
            Log.i("connectWebService", result.toString());
            return result.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "0";
        }
    }

© 著作权归作者所有

共有 人打赏支持
ForingY
粉丝 23
博文 272
码字总数 156129
作品 0
杭州
程序员
私信 提问
项目需求讨论 - WebView下拍照及图片选择功能

前言: 如果觉得掘金上看图片放大看不清楚,可以跳到另外的同步发布的链接看,放大图片下部有个可以查看原图功能,很清楚:项目需求讨论 - WebView下拍照及图片选择功能 现在很多app里面,都...

青蛙要fly
06/23
0
0
使用 android 的摄像头拍照

android提供了操作摄像头的API,可以通过两种做法来使用: 通过Intent直接调用系统提供的照相机功能,复用它的拍照Activity,这是最简单和最方便的办法,因为你不需要考虑手机的兼容性问题,...

华宰
2011/09/07
5K
0
Android 调用系统拍照 笔记

由于临时需要做个简单的Android程序,其中涉及调用系统拍照并保存照片。之前没有任何Java和Android经验,coding中遇到不少问题,特记录以供参考。 Google一下能找到不少现成的调用系统拍照的...

会说话的哑巴
2012/09/07
0
0
组长问我几天能开发一个人见人爱的百万量级Android相机,我是这样回答的...

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ空间开发团队发表于云+社区专栏 最近我负责开发了一个跟Android相机有关的需求,新功能允许用户使用手机摄像头,快速拍摄...

腾讯云+社区
09/19
0
0
解读 Android 4.2 Jelly Bean 新特性

因为受飓风影响,Google取消了Android以及Nexus的发布会,但是即便如此,Google仍通过网络发布了全新的Android4.2系统。新的系统保留了原来Jelly Bean 名字,整体用户体验并没有太大的改动,...

oschina
2012/11/06
2.7K
11

没有更多内容

加载失败,请刷新页面

加载更多

20181213 上课截图

小丑鱼00
10分钟前
0
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
17分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
33分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
48分钟前
2
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
50分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部