//这个主要的拍照处理的activity,由于这边出现了一种情况:有两个Activity,一个为A,一个为B,由A跳B,再由B跳向拍照,拍完照返回时发现B消失了,查了查原因可能是由于手机内存过于小,当跳转到拍照时,app相当于位于后台,在拍照的过程中,手机自动杀死了Activity导致返回时候Activity为空,app出错,这里进行的处理就是在Activity被杀死时候通过saveinstance保存拍照地址进行处理。
public class UseCameraActivity extends AppCompatActivity { public final static String IMAGEFILEPATH = "ImageFilePath"; public final static String IMAGE_PATH = "image_path"; private String mImageFilePath; private final static String TAG ="UseCameraActivity"; static Activity mContext; private static Context applicationContext; public static final int TAKE_PHOTO=1111; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //判断savedInstanceState是否保存的有数据 if (savedInstanceState != null) { //有数据,获取数据并返回 mImageFilePath = savedInstanceState.getString(IMAGEFILEPATH); File file = new File(mImageFilePath); if (file.exists()) { Intent intent = new Intent(); intent.putExtra(IMAGE_PATH, IMAGEFILEPATH); setResult(RESULT_OK, intent); Log.e(TAG,"拍摄成功"); finish(); }else{ Log.e(TAG,"拍摄失败"); } } //没有数据,前往拍照页面 mContext=this; applicationContext=getApplicationContext(); if(savedInstanceState==null){ takePhoto(); } } //这里获取系统时间给图片命名 public void takePhoto(){ long currentTimeMillis = System.currentTimeMillis(); mImageFilePath = getCameraPath() + currentTimeMillis+".jpg"; File file = new File(mImageFilePath); showCamera(file); } private void showCamera(File file){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); startActivityForResult(intent,TAKE_PHOTO); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==TAKE_PHOTO&&resultCode==RESULT_OK){ Intent intent = new Intent(); intent.putExtra(IMAGE_PATH,IMAGEFILEPATH); setResult(RESULT_OK,intent); finish(); }else{ finish(); } } @Override protected void onDestroy() { super.onDestroy(); } //Activity被杀死时候保存数据 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(IMAGEFILEPATH,mImageFilePath+""); } //下面这三个方法是为了创建file,华为的手机不会默认创建3级file,只能一层一层慢慢创建了, public static String getCameraPath() { String filePath = getImageRootPath() + "/camera/"; File file = new File(filePath); if (!file.isDirectory()) { file.mkdirs(); } file = null; return filePath; } public static String getImageRootPath() { String filePath = getAppRootPath() + "/image"; File file = new File(filePath); if (!file.exists()) { file.mkdirs(); } file = null; return filePath; } public static String getAppRootPath() { String filePath = "/a"; if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { filePath = Environment.getExternalStorageDirectory() + filePath; } else { filePath = applicationContext.getCacheDir() + filePath; } File file = new File(filePath); if (!file.exists()) { file.mkdirs(); } file = null; File nomedia = new File(filePath + "/.nomedia"); if (!nomedia.exists()) try { nomedia.createNewFile(); } catch (IOException e) { } return filePath; } }