android拍照null
1. Android 使用系统相机拍照和读取相册照片
1.拍照 (对于7.0以上的版本,不在允许直接访问uri)
`
若不指定输出路径intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri(srcActivity)); 在onActivityResult()中,通过
`
可以拿到uri,但获得的图片是被压缩过的。若指定intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);输出路径,则此处的intent为null,但可以使用我们存的uri读取照片,此时的照片没有被压缩。
2.从相册中读取照片, 方法:
`
`
即使设置 intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri(srcActivity));输出路径,仍然不能从此路径中读取,只能在onActivityForResult()中通过event.uri = intent.getData();方式获得图片uri。
此种现象也好理解,拍照时产生新的图片,自然可根据设置的uri进行图片保存,而读取相册时,图片已经在目录中不能转移到自己设定的uri中。
Androidmanifest.xml中
`
在 res/xml/provider_paths.xml
`
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="JDTobs" path=""/>
<files-path name="name" path="path" />
<cache-path name="name" path="path" /> <external-path name="name" path="path" />
<external-files-path name="name" path="path" />
<external-cache-path name="name" path="path" /> </paths> `
读取uri
2. android camera.open一直返回null
看看你的相机是不是有些问题,用其他相机程序能不能打开,第二,是不是有些程序打开了相机没有关闭,这样你是获取不到的
3. android调用手机拍照以及从相册选择照片需要判断版本号吗
举个实际例子看看吧。
/*用来标识请求照相功能的activity*/
private static final int CAMERA_WITH_DATA = 3023;
/*用来标识请求gallery的activity*/
private static final int PHOTO_PICKED_WITH_DATA = 3021;
/*拍照的照片存储位置*/
private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera");
private File mCurrentPhotoFile;//照相机拍照得到的图片
[java] view
plain
private void doPickPhotoAction() {
Context context = EditContact.this;
// Wrap our context to inflate list items using correct theme
final Context dialogContext = new ContextThemeWrapper(context,
android.R.style.Theme_Light);
String cancel="返回";
String[] choices;
choices = new String[2];
choices[0] = getString(R.string.take_photo); //拍照
choices[1] = getString(R.string.pick_photo); //从相册中选择
final ListAdapter adapter = new ArrayAdapter<String>(dialogContext,
android.R.layout.simple_list_item_1, choices);
final AlertDialog.Builder builder = new AlertDialog.Builder(
dialogContext);
builder.setTitle(R.string.attachToContact);
builder.setSingleChoiceItems(adapter, -1,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
switch (which) {
case 0:{
String status=Environment.getExternalStorageState();
if(status.equals(Environment.MEDIA_MOUNTED)){//判断是否有SD卡
doTakePhoto();// 用户点击了从照相机获取
}
else{
showToast("没有SD卡");
}
break;
}
case 1:
doPickPhotoFromGallery();// 从相册中去获取
break;
}
}
});
builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
}
/**
* 拍照获取图片
*
*/
protected void doTakePhoto() {
try {
// Launch camera to take photo for selected contact
PHOTO_DIR.mkdirs();// 创建照片的存储目录
mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());// 给新照的照片文件命名
final Intent intent = getTakePickIntent(mCurrentPhotoFile);
startActivityForResult(intent, CAMERA_WITH_DATA);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.photoPickerNotFoundText,
Toast.LENGTH_LONG).show();
}
}
public static Intent getTakePickIntent(File f) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
return intent;
}
/**
* 用当前时间给取得的图片命名
*
*/
private String getPhotoFileName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'_yyyy-MM-dd HH:mm:ss");
return dateFormat.format(date) + ".jpg";
}
// 请求Gallery程序
protected void doPickPhotoFromGallery() {
try {
// Launch picker to choose photo for selected contact
final Intent intent = getPhotoPickIntent();
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.photoPickerNotFoundText1,
Toast.LENGTH_LONG).show();
}
}
// 封装请求Gallery的intent
public static Intent getPhotoPickIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
// 因为调用了Camera和Gally所以要判断他们各自的返回情况,他们启动时是这样的startActivityForResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK)
return;
switch (requestCode) {
case PHOTO_PICKED_WITH_DATA: {// 调用Gallery返回的
final Bitmap photo = data.getParcelableExtra("data");
// 下面就是显示照片了
System.out.println(photo);
//缓存用户选择的图片
img = getBitmapByte(photo);
mEditor.setPhotoBitmap(photo);
System.out.println("set new photo");
break;
}
case CAMERA_WITH_DATA: {// 照相机程序返回的,再次调用图片剪辑程序去修剪图片
doCropPhoto(mCurrentPhotoFile);
break;
}
}
}
protected void doCropPhoto(File f) {
try {
// 启动gallery去剪辑这个照片
final Intent intent = getCropImageIntent(Uri.fromFile(f));
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
} catch (Exception e) {
Toast.makeText(this, R.string.photoPickerNotFoundText,
Toast.LENGTH_LONG).show();
}
}
/**
* Constructs an intent for image cropping. 调用图片剪辑程序
*/
public static Intent getCropImageIntent(Uri photoUri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(photoUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 80);
intent.putExtra("outputY", 80);
intent.putExtra("return-data", true);
return intent;
}
4. 安卓手机什么拍照软件最好用
手机拍照也是安卓手机娱乐一项不可缺少的功能,现在手机标配摄像头一般也达到了800万像素,完全可以满足日常拍摄需求。手机拍照后也需要软件来处理图片,这样的图片的效果才会更加绚烂,下面为大家介绍几款经典好用的Android手机拍照软件。
1、网络魔图
网络魔图(原魔图精灵)软件是一款好玩易用的掌上美图工具,致力于提供智能手机上的图片拍摄、美化和分享一站式图片流服务。
只要指尖涂抹或点触,便可轻松美白、磨皮、祛痘、放大眼睛、瘦脸瘦身,为喜爱自拍和人像美容的用户量身定做。大量漂亮实用的图片效果,一键完成柔光、LOMO、秋色、蓝调、老照片、梦幻等等艺术效果,让同一张照片有不同味道。
2、Q拍
Q拍for Android,可以让不太会拍照的你瞬间转变成专业摄影师,它提供多款炫酷滤镜,让你创作出惊艳的作品,并且通过一键分享同步到空间、微博、朋友网多个平台,真正让你享受随时随刻拍大片,随时随地分享生活的乐趣。完全免费,无限量照片上传。
不登录,也可拍照和加特效,并将处理后的照片保存在手机里。登录后,可将精美的照片分享到QQ空间、腾讯微博,同时可查看好友在QQ空间、朋友网上传的照片,随时随地畅游好友的精彩照片,保持实时互动。
3、POCO相机
POCO相机是针对手机拍照用户群推出的多镜头拍照及视频、美化处理、一键多平台分享的超级手机拍照工具,内置了多款可更换“镜头”(四格LOMO、二格镜头、拼图镜头及普通镜头等),满足不同的拍摄玩法。
通过POCO相机可以对照片即时进行颜色处理、装饰、边框等美化功能,超过40种后期功能体验“PS”的乐趣,随拍或是创作,都是不错的选择。内置网络同步功能,可将图片直接导入POCO图片社区提供的网络相册,无限存储空间,安全、永不丢失。
4、Camera360
Camera360可以辅助用户拍摄出独具风格的照片,弥补了手机镜头成像质量不理想、层次差、感光范围弱等缺点,增强了照片的视觉冲击力和层次。为不同环境的照片提供了不同的风格化处理,增加了照片的艺术性,提高了用户手机摄影的乐趣与分享的自信。
LOMO、复古、梦幻、黑与白艺术、梦回1839、效果增强、夜景拍摄的神奇效果让原本普通的照片瞬间充满不可思议的魔力;让你感觉到,原来做一个摄影大师就这么简单。
Camera360还为用户提供了独具创意的照片个性风格分享功能,照片拍摄完成以后,可以一键快速的将照片分享至自己的新浪微博、腾讯微博、Facebook、Flickr、Twitter等互动分享平台上。
5、布丁相机
布丁相机是一款来自韩国的多效果拍照增强相机应用,界面简洁漂亮,而且这款相机最大的特点是选择效果的方式。
软件功能强大,使用方式也很独特。它提供了多种相机类型的选择(例如鱼眼,宽景,四格连拍等),以及不同底片滤镜效果,并有实际范例图供您先行了解效果。所以你不用再去了解一些照片效果的专业术语,只需对相机的外观和胶卷的类型有所了解,甚至对比范例什么都不知道,也能拍出自己喜欢的效果。
6、纸片相机
纸片相机(Paper Camera)是一款独家特色的手机拍照软件。不仅是拍照效果,软件的界面就像是一块用于涂鸦的画布。你可以在这里取材于生活,任意修饰以涂鸦效果。
相信大家已经看过许多LOMO风格的拍照软件,例如Little Photo,而Paper Camera纸布相机的拍摄效果则是以绘画风格为主,应该会令各位喜欢拍照的朋友们有个新颖的选择。软件界面以涂鸦风格将拍照、效果切换等功能呈现于大家眼前,非常可爱。