调用系统相机拍照后应用闪退

张木桶 发布于 2014/03/15 08:21
阅读 3K+
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

我在做一个小应用,调用系统相机进行拍照,将相片保存在sd卡里面,然后再进行处理。现在主要的问题有两个:

1、程序能够实现调用系统相机拍照,但是拍完点击确定之后应用就闪退了,拍的相片能够保存在sd卡里面。个人觉得是重写的onActivityResult出现了问题,但是一直检查不出来……

2、我是使用Genymotion模拟器进行调试(win7平台),但是却经常回遇到模拟器被强制关闭的情况。

请问大神们这是怎么回事呢?下面是我的MainActivity的代码:

package com.example.camera;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity{
	Button button1;
	Button button2;
	private String name;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button1 =(Button)findViewById(R.id.button1);
		name=new DateFormat().format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA))+".jpg";
		name="IMG_"+name;
		button1.setOnClickListener(new OnClickListener(){//设置监听对象
			@Override
			public void onClick(View v){
				//实例化一个intent,并指定action
				Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//调用系统相机
				//指定一个图片路径对应的file对象
				File vfile=new File("/sdcard/DCIM/Camera");
				if(!vfile.exists())
				{
					vfile.mkdirs();//创建文件夹
				}
				File vFile=new File(vfile,name);
				Uri uri=Uri.fromFile(vFile);
				intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
				startActivityForResult(intent,Activity.DEFAULT_KEYS_DIALER);//启动系统相机的activity

			}
		});
		button2=(Button)findViewById(R.id.button2);
		button2.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				Intent intent=new Intent(MainActivity.this,SecondActivity.class);
				startActivity(intent);
			}
		});
	}
	@Override
	protected void onActivityResult(int requestCode,int resultCode,Intent data)
	{
		super.onActivityResult(requestCode, resultCode, data);
		if(resultCode==Activity.RESULT_OK)
		{
			String sdStatus=Environment.getExternalStorageState();
			if(!sdStatus.equals(Environment.MEDIA_MOUNTED))
			{
				Log.i("TestFile","SD card is not avaiable/writable right now");
				return;
			}
			Bundle bundle=data.getExtras();
			Bitmap bitmap=(Bitmap)bundle.get("data");
			FileOutputStream b=null;//FileOutputStream为文件写入
			String fileName="/sdcard/DCIM/Camera"+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();
				}
			}
			((ImageView) findViewById(R.id.imageView)).setImageBitmap(bitmap);
		}
	}
}



加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部