开源夏令营第四周-拍照并上传操作

对于这个功能的大致构想如下:

在menu菜单中加入拍照按钮 --> 调用手机自带的相机app --> 将拍好的照片保存在SD卡中某一特定目录 --> 向BrowserActivity返回这个照片的路径 --> 调用UploadTask函数上传


这个功能在实现时需要注意的是:

1.在用户点击按钮时要记录当前的资料库、路径,为最后的上传工作做准备

2.因为安卓阵营的机型繁多复杂,并且各个厂商的订制系统又不一样,所以直接调用硬件容易出问题,而调用手机自带的相机app则会减少很多问题

3.写完代码时要加上使用相机的权限问题。而且在启动app时要判断是否有SD卡,手机是否有相机,若没有的话可将此功能关闭。(在Seadroid中开机会检查SD Card的状态,若是没有或是配置不正确则会throw RuntimeException,所以在此就不需要单独判断了)

4.关于onActivityResult(int requestCode, int resultCode, Intent data) 中data返回null的问题:当照片存储路径为默认图片库(即没有Intent.putExtra(MediaStore.EXTRA_OUTPUT, photo)这句话时),data有返回值,返回的是拍得照片的缩略图;当存储路径改为自定义的路径时,data返回为null,需要我们自定义一个Uri来记录照片。


核心代码:

private void CameraTakePhoto() {
        Intent imageCaptureIntent = new Intent("android.media.action.IMAGE_CAPTURE");
        
        String strImgDirPath = DataManager.getExternalRootDirectory() + "/myPhotos/";
        String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";
        strImgPath = strImgDirPath + fileName;
        
        File ImgDir = new File(strImgDirPath);
        if (!ImgDir.exists()) {
            ImgDir.mkdirs();
        }
        File Img = new File(strImgDirPath, fileName);
        while (Img.exists()) {
            fileName = fileName + "(1)";
            strImgPath = strImgDirPath + fileName;
        }
        Uri photo = Uri.fromFile(Img);
        imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photo);
        setResult(RESULT_OK, imageCaptureIntent);
        startActivityForResult(imageCaptureIntent, TAKE_PHOTO_REQUEST);
    }



还要给BrowserActivity中返回result,所以要在onActivityResult中加入如下代码:

case TAKE_PHOTO_REQUEST:
            if (resultCode == RESULT_OK) {
                showToast(getString(R.string.take_photo_successfully));
                if (!Utils.isNetworkOn()) {
                    showToast("Network is not connected");
                    return;
                }


                if(strImgPath == null) {
                    showToast("Unable to upload, no path available");
                    Log.i(DEBUG_TAG, "Pick file request did not return a path");
                    return;
                }
                showToast(getString(R.string.added_to_upload_tasks));
                addUploadTask(navContext.getRepoID(),
                        navContext.getRepoName(), navContext.getDirPath(), strImgPath);
            }


因为seafile的特殊性,上述代码并非完整代码,调用了很多其他函数。若是想要完整的拍照代码,谷歌一下会得到很多,此处便不再详述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值