Android部分手机拍照上传返回为空处理,和拍照后图片压缩后保存到指定路径下
2017-08-02 15:26
851 查看
Android手机拍照返回时,部分手机拍照返回时,在onActivityResult方法中使用data.getData()返回为空,解决方法为: private Uri photoUri=null;
private File oldFile;
private File newFile;
public void takePhoto() {
try {
// 执行拍照前,应该先判断SD卡是否存在
if (Bimp.checkSDCardAvailable()) {
Intent openFileIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
openFileIntent.putExtra(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, filename);
photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
openFileIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(openFileIntent, SELECT_PIC_BY_TACK_PHOTO);
} else {
Toast.makeText(SbtjclActivity.this, "SD卡不存在",
Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
} else {
switch (requestCode) {
case SELECT_PIC_BY_TACK_PHOTO:
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
Log.i("TestFile",
"SD card is not avaiable/writeable right now.");
return;
}
Bitmap bitmap = null;
try {
Uri result = null;
if (data != null) {
result = data.getData();
}else {
result = photoUri;
}
oldFile = FileUtil.getTempFile(this, result);
//压缩原图片 得到压缩后的图片
newFile = CompressHelper.getDefault(getApplicationContext()).compressToFile(oldFile);
bitmap = BitmapFactory.decodeFile(newFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
/*以下将压缩后的照片保存到指定的路径下*/
String name = CommonUtils.getGMTime("yyyyMMddHHmmss") + ".jpg";
String path = ConstantValue.IMG_LOCAL_POSITION_SP;
FileOutputStream b = null;
// 不能直接保存在系统相册位置
File file = new File(path);
if (!file.exists()){
file.mkdirs();// 创建文件夹
}
String fileName = path + name;
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, b);// 把数据写入文件
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
break;
}
}
}
图片压缩采用的github上大神写的开源项目: https://github.com/nanchen2251/CompressHelper
项目中遇到的问题,写下来,避免以后忘了。
部分知识点参考:
http://www.jianshu.com/p/82c54dd67c51
private File oldFile;
private File newFile;
public void takePhoto() {
try {
// 执行拍照前,应该先判断SD卡是否存在
if (Bimp.checkSDCardAvailable()) {
Intent openFileIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
openFileIntent.putExtra(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, filename);
photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
openFileIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(openFileIntent, SELECT_PIC_BY_TACK_PHOTO);
} else {
Toast.makeText(SbtjclActivity.this, "SD卡不存在",
Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
} else {
switch (requestCode) {
case SELECT_PIC_BY_TACK_PHOTO:
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
Log.i("TestFile",
"SD card is not avaiable/writeable right now.");
return;
}
Bitmap bitmap = null;
try {
Uri result = null;
if (data != null) {
result = data.getData();
}else {
result = photoUri;
}
oldFile = FileUtil.getTempFile(this, result);
//压缩原图片 得到压缩后的图片
newFile = CompressHelper.getDefault(getApplicationContext()).compressToFile(oldFile);
bitmap = BitmapFactory.decodeFile(newFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
/*以下将压缩后的照片保存到指定的路径下*/
String name = CommonUtils.getGMTime("yyyyMMddHHmmss") + ".jpg";
String path = ConstantValue.IMG_LOCAL_POSITION_SP;
FileOutputStream b = null;
// 不能直接保存在系统相册位置
File file = new File(path);
if (!file.exists()){
file.mkdirs();// 创建文件夹
}
String fileName = path + name;
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, b);// 把数据写入文件
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
break;
}
}
}
图片压缩采用的github上大神写的开源项目: https://github.com/nanchen2251/CompressHelper
项目中遇到的问题,写下来,避免以后忘了。
部分知识点参考:
http://www.jianshu.com/p/82c54dd67c51
相关文章推荐
- Android开发——相册拍照_03.解决相机拍照之后部分手机无法将图片保存到路径或部分手机点击相机确定无法返回问题
- Android手机拍照,相册拿取图片,压缩上传,7.0权限
- 图片压缩保存 处理三星拍照图片旋转问题的部分方法
- 本文主要是android中几个图片处理的工具,包括(拼接图片,截屏,将控件转换成图片,drawable转成图片,保存bitmap到指定路径)
- Android:拍照功能及将图片压缩存入指定路径的方法
- Android:Camera的使用,并处理手机拍照后上传图片被旋转的问题
- Android--使用手机拍照获取图片路径,小米手机选择照片问题处理
- 关于部分android手机连拍模式,手机拍照上传的图片旋转了90度的c#解决方案
- Android拍照按路径保存图片以及图片压缩不失真
- Android 把bitmap转换成String,计算图片的缩放值,根据路径获得突破并压缩返回bitmap用于显示,获取保存 隐患检查的图片文件夹名称,获取保存图片的目录,根据路径删除图片,添加到图库
- android有的手机拍照后上传图片被旋转的问题
- 解决android有的手机拍照后上传图片被旋转的问题
- android 图片压缩,自动旋转保存,查看照片信息,拍照设备类型等
- 解决android有的手机拍照后上传图片被旋转的问题
- android 拍照或者图库选择 压缩后 图片 上传
- android 拍照+从手机相册选择返回图片到imagview
- php上传图片到指定位置路径保存到数据库的具体实现
- 有些Android手机拍照上传被旋转90度的处理方法
- android学习笔记----解决android有的手机拍照后上传图片被旋转的问题
- php上传图片到指定位置路径保存到数据库的具体实现