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

SongXiong4 2014-03-15 08:45:58
我在做一个小应用,调用系统相机进行拍照,将相片保存在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);
}
}
}

...全文
814 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
windsunmoon 2015-01-23
  • 打赏
  • 举报
回复
引用 9 楼 jialipu 的回复:
请问楼主,您调用相机后闪退的问题怎么解决的?方便指导一下吗?
参考这篇文章: http://blog.csdn.net/windsunmoon/article/details/27702475
jialipu 2015-01-22
  • 打赏
  • 举报
回复
请问楼主,您调用相机后闪退的问题怎么解决的?方便指导一下吗?
SongXiong4 2014-03-15
  • 打赏
  • 举报
回复
引用 4 楼 hslinux 的回复:
只有保存到相册的才可以从相册里面看到。如果随便存相册都可以看到,那就神了。
我上网找了一下,貌似是由于没有发布广播,我参考了这篇博客:http://http://blog.csdn.net/xiaanming/article/details/8990627
SongXiong4 2014-03-15
  • 打赏
  • 举报
回复
引用 4 楼 hslinux 的回复:
只有保存到相册的才可以从相册里面看到。如果随便存相册都可以看到,那就神了。
我是保存在sd卡里面,然后想要对图片进行编辑。拍照后相片会存在sd卡里面,但是像手机自带和相册和第三方应用如美图秀秀都无法看到刚刚拍照存在sd卡里面的相片……(我是把拍照所得的相片保存在系统自带图库的文件夹里面的)
SongXiong4 2014-03-15
  • 打赏
  • 举报
回复
引用 5 楼 hjywyj 的回复:
将下面两行代码放到button1.setOnClickListener里的onClick方法里面,还有,我这里显示图片到imageview是没问题的。 name = new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg"; name = "IMG_" + name;
额……按照您的方法,我在genymotion和真机上都进行了调试,但是还是无法显示在ImageView中,我看了一下您的代码,那个ImageView的id我命名为imageview,您的为ImageView1,不过感觉这个应该也不会影响……
  • 打赏
  • 举报
回复
将下面两行代码放到button1.setOnClickListener里的onClick方法里面,还有,我这里显示图片到imageview是没问题的。 name = new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg"; name = "IMG_" + name;
hslinux 2014-03-15
  • 打赏
  • 举报
回复
只有保存到相册的才可以从相册里面看到。如果随便存相册都可以看到,那就神了。
SongXiong4 2014-03-15
  • 打赏
  • 举报
回复
引用 1 楼 hjywyj 的回复:
try

@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;
			}
			String fileName = "/sdcard/DCIM/Camera/" + name;
			((ImageView) findViewById(R.id.imageView1))
					.setImageBitmap(BitmapFactory.decodeFile(fileName));
		}
	}
谢谢你,@hjywyi。 现在不会拍照后应用不会闪退了。但是新的问题又出现了,拍的照片无法读取显示在ImageView中,而且保存在sd卡里面后相册也不能查看……这是为什么呢?
SongXiong4 2014-03-15
  • 打赏
  • 举报
回复
谢谢你,@hjywyi。 现在不会拍照后应用不会闪退了。但是新的问题又出现了,拍的照片无法读取显示在ImageView中,而且保存在sd卡里面后相册也不能查看……这是为什么呢?
  • 打赏
  • 举报
回复
try

@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;
			}
			String fileName = "/sdcard/DCIM/Camera/" + name;
			((ImageView) findViewById(R.id.imageView1))
					.setImageBitmap(BitmapFactory.decodeFile(fileName));
		}
	}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧