您的位置:首页 > 其它

调用相机和手机拍照

2016-01-04 19:55 309 查看
import android.app.Activity;

import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.format.DateFormat;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

import com.example.administrator.myapplication.image.PorterDuffViewImage;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;

public class MainActivity extends Activity implements View.OnClickListener{

private static final int CAMERA_WITH_DATA = 3023;
private static final int UPLOAD_IMAGE = 1 ;

String path;
private String picPath;
/* 用来标识请求gallery的activity */
/* 拍照的照片存储位置 */
public static final File PHOTO_DIR = new File(
Environment.getExternalStorageDirectory() + "/DCIM/Camera");

private PorterDuffViewImage porter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_activity_main);
porter = (PorterDuffViewImage) findViewById(R.id.porter);
porter.setImageResource(R.mipmap.h11);
findViewById(R.id.btn_id).setOnClickListener(this);

}

private void initDate(){

}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_id:
showCustomAlertDialog();
}
}

private void showCustomAlertDialog(){
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.show();
Window win = alertDialog.getWindow();

WindowManager.LayoutParams lp = win.getAttributes();
win.setGravity(Gravity.LEFT | Gravity.BOTTOM);
lp.alpha = 0.7f;
win.setAttributes(lp);
win.setContentView(R.layout.dialog);
Button camera_camera  = (Button) win.findViewById(R.id.camera_camera);
Button camera_phone = (Button) win.findViewById(R.id.camera_phone);
Button camera_cancel = (Button) win.findViewById(R.id.camera_cancel);
camera_camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/my_photo.jpg")));
startActivityForResult(intent, 1);
}
});

camera_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, 2);
}
});
camera_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
})
4000
;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode !=RESULT_OK)
return;
switch (requestCode){
case 1:
File temp = new File(Environment.getExternalStorageDirectory() + "/my_photo.jpg");
startPhotoZoom(Uri.fromFile(temp));
break;
case 2:
startPhotoZoom(data.getData());
break;
case 3:
Bitmap bitm = getBitmap(data);
porter.setImageBitmap(bitm);

}

super.onActivityResult(requestCode, resultCode, data);
}
public void startPhotoZoom(Uri uri)
{
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", true);
startActivityForResult(intent, 3);
}

private void doTakePhoto(){
try{
path = Environment.getExternalStorageDirectory() + "/+" + 123
+ ".jpg";
final Intent intent = getTakePickIntent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(path)));
startActivityForResult(intent, CAMERA_WITH_DATA);
}catch (ActivityNotFoundException e) {
Toast.makeText(this, "获取照片错误", Toast.LENGTH_LONG).show();
}
}

private void doCropPhoto(Intent data){
Uri currImageURI = null;
if (data != null) {
if (data.getExtras() != null) {
File file = getFile(getBitmap(data));
// File mCurrentPhotoFile = new File(PHOTO_DIR,
// getPhotoFileName());//
// 给新照的照片文件命名
currImageURI = Uri.fromFile(file);
} else {
currImageURI = data.getData();
}
} else {
currImageURI = Uri.fromFile(new File(path));
}

try {
// 启动gallery去剪辑这个照片
final Intent intent = getCropImageIntent(currImageURI);

startActivityForResult(intent, UPLOAD_IMAGE);
} catch (Exception e) {
Toast.makeText(this, "获取照片错误", Toast.LENGTH_LONG).show();
}
}

private 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", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", true);
return intent;
}

private Bitmap getBitmap(Intent data) {

Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式

return bitmap;
}

private File getFile(Bitmap bitmap) {

String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用

return null;
}
String name = new DateFormat().format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA))
+ ".jpg";

FileOutputStream b = null;

if (!PHOTO_DIR.isDirectory()) {
PHOTO_DIR.mkdirs();// 创建文件夹
}
File fileName = new File(PHOTO_DIR, 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();
}
}

return fileName;
}

private static Intent getTakePickIntent(String action) {
Intent intent = new Intent();
intent.putExtra("return-data", true);
intent.setAction(action);
// intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
return intent;
}

// 请求Gallery程序
private void doPickPhotoFromGallery() {
try {
// Launch picker to choose photo for selected contact
final Intent intent = getPhotoPickIntent();
startActivityForResult(intent, UPLOAD_IMAGE);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "获取照片错误", Toast.LENGTH_LONG).show();
}
}
// 封装请求Gallery的intent
private static Intent getPhotoPickIntent() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 10);
intent.putExtra("aspectY", 10);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", true);
return intent;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: