【开源中国 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); } } }