Android 调用系统拍照

  次阅读 来源:互联网(转载协议) 2015-09-29 10:07 我要评论(0)

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

Google一下能找到不少现成的调用系统拍照的代码,可弄了一天也没成功。测试手机为Defy,系统是Android4.0/MIUI-1.11-9。先附上网上搜所的代码,后说明遇到的问题:

1.响应按钮点击事件,调用系统拍照,其中RESULT_CAPTURE_IMAGE为自定义拍照标志。

public void onClick(View v) {

startActivityForResult(new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE,RESULT_CAPTURE_IMAGE);

}

2.Override onActivityResult(int requestCode, int resultCode, Intent data)方法,在此方法中保存图片。其中imagePath在此类中已定义,操作sdcard权限在清单文件中已添加,判断sdcard是否存在以及指 定文件目录是否存在在此之前都已做处理。

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if(requestCode == RESULT_CAPTURE_IMAGE) {

if(resultCode == RESULT_OK) {

File file = new File(imagePath);

Bitmap bitmap = (Bitmap)data.getExtras().get("data");

try {

BufferOutputStream bos = new BufferOutputStream(new FileOutputStream(file));

//采用压缩转档方法

bitmap.compress(Bitmap.CompressFormat.JPEG,80,bos);

bos.flush();

bos.close();

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

用以上代码碰到的问题:

在MIUI下无法取到照片数据,跟踪发现data.getExtras()为空,之后使用BitmapFactory.decodeFile()方法解决;

手机上测试没有保存图片,跟踪发现data为null,继续Google,找到以下代码

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

Uri uri = Uri.fromFile(new File(imagePath));

intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);

startActivityForResult(intent,RESULT_CAPTURE_IMAGE);

将按钮onClick方法中采用以上代码,调用系统拍照并确定之后,无法返回程序Activity。继续Google,终于找到解决办法,代码如下(在 if(resultCode == RESULT_OK)里面)

Bitmap bitmap = null;

File file = new File(imagePath);

bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());

if(bitmap == null) {

Toast.makeText(this,R.string.image_save_error,Toast.LENGTH_LONG).show();

}

try {

BufferOutputStream bos = new BufferOutputStream(new FileOutputStream(file));

bitmap.compress(Bitmap.CompressFormat.JPEG,80,bos);

bos.flush();

bos.close();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

super.onActivityResult(requestCode,resultCode,data);

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...