三星在运行相机后破坏表面

时间:2015-07-01 15:36:11

标签: android

我建立了一个活动来从画廊中选择图片。我试图在三个不同的设备上运行我的应用程序,三星,索尼和中兴。

三星设备是唯一有时会崩溃的设备,我得到的错误是:

  

在没有窗口的情况下摧毁表面。

这条消息说明了一切,当我打开相机或画廊时,三星会自动摧毁表面,当我尝试回到我的活动时,应用程序崩溃,因为我的表面不再存在。

我正在尝试修复此错误,这就是我的功能:

        private void selectImage() {

            final CharSequence[] options = {
                    translate.translation(language, 27), translate.translation(language, 28), translate.translation(language, 19)
            };

            AlertDialog.Builder builder = new AlertDialog.Builder(PhotosActivity.this);
            builder.setTitle(translate.translation(language, 26));
            builder.setItems(options, new DialogInterface.OnClickListener() {@Override
                public void onClick(DialogInterface dialog, int item) {

//take picture

                    if (options[item].equals(translate.translation(language, 28))) {
                        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                        startActivityForResult(intent, 2);
    //gallery
                    } else if 
(options[item].equals(translate.translation(language, 27))) {
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                        startActivityForResult(intent, 1);
                    } else if (options[item].equals(translate.translation(language, 19))) {
                        dialog.dismiss();
                    }
                }
            });
            builder.show();
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                if (requestCode == 1) {
                    File f = new File(Environment.getExternalStorageDirectory().toString());
                    for (File temp: f.listFiles()) {
                        if (temp.getName().equals("temp.jpg")) {
                            f = temp;
                            break;
                        }
                    }
                    try {
                        Bitmap bitmap;
                        BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();

                        bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
                        bitmapOptions);

                        if (bitmap.getWidth() > bitmap.getHeight()) {
                            Matrix matrix = new Matrix();
                            matrix.postRotate(getExifOrientation(f.getAbsolutePath()));
                            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
                        }

                        int nh = (int)(bitmap.getHeight() * (612.0 / bitmap.getWidth()));
                        Bitmap scaled = Bitmap.createScaledBitmap(bitmap, 612, nh, true);

                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        scaled.compress(Bitmap.CompressFormat.JPEG, 90, stream);

                        byte[] byte_arr = stream.toByteArray();
                        String image_str = Base64.encodeBytes(byte_arr);

                        newtask = new saveImage();
                        newtask.execute(image_str, sessionid);

                        Toast.makeText(getBaseContext(), translate.translation(language, 29),
                        Toast.LENGTH_LONG).show();

                        String path = android.os.Environment.getExternalStorageDirectory() + File.separator + "Phoenix" + File.separator + "default";
                        f.delete();

                        Log.e("", path);


                        FileOutputStream outFile = null;
                        File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                        try {
                            outFile = new FileOutputStream(file);
                            bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
                            outFile.flush();
                            outFile.close();

                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                if (requestCode == 2) {

                    Uri selectedImage = data.getData();

                    String[] filePath = {
                        MediaStore.Images.Media.DATA
                    };
                    Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null);
                    c.moveToFirst();
                    int columnIndex = c.getColumnIndex(filePath[0]);
                    String picturePath = c.getString(columnIndex);


                    c.close();
                    Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));

                    if (thumbnail.getWidth() > thumbnail.getHeight()) {
                        Matrix matrix = new Matrix();
                        matrix.postRotate(getExifOrientation(picturePath));
                        thumbnail = Bitmap.createBitmap(thumbnail, 0, 0, thumbnail.getWidth(), thumbnail.getHeight(), matrix, true);
                    }

                    int nh = (int)(thumbnail.getHeight() * (612.0 / thumbnail.getWidth()));
                    Bitmap scaled = Bitmap.createScaledBitmap(thumbnail, 612, nh, true);

                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    scaled.compress(Bitmap.CompressFormat.JPEG, 90, stream);

                    byte[] byte_arr = stream.toByteArray();
                    String image_str = Base64.encodeBytes(byte_arr);


                    newtask = new saveImage();
                    newtask.execute(image_str, sessionid);

                    Toast.makeText(getBaseContext(), translate.translation(language, 29),
                    Toast.LENGTH_LONG).show();

                }
            }
        }

        public static int getExifOrientation(String filepath) { 
            int degree = 0;
            ExifInterface exif = null;
            try {
                exif = new ExifInterface(filepath);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            if (exif != null) {
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
                if (orientation != -1) {
                    switch (orientation) {
                        case ExifInterface.ORIENTATION_ROTATE_90:
                            degree = 90;
                            break;
                        case ExifInterface.ORIENTATION_ROTATE_180:
                            degree = 180;
                            break;
                        case ExifInterface.ORIENTATION_ROTATE_270:
                            degree = 270;
                            break;
                    }

                }
            }
            return degree;
        }
    }

感谢。

0 个答案:

没有答案