2016-09-26 3 views
2

Я использовал камеру для захвата фотографии и отправки ее другим действиям для дальнейшего использования. Я включил EXTRA_OUTPUT часть в putExtra метод камеры, так что я могу получить изображение полного размера, а не миниатюру. Проблема в том, что после захвата изображения я перенаправлен на MainActivity. Когда я увидел в File Manager, я обнаружил, что изображение было сохранено. Пожалуйста помоги.Вопрос о намерениях камеры в Android

CameraButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
       String imageFileName = timeStamp + ".jpg"; 
       File storageDir = Environment.getExternalStoragePublicDirectory(
         Environment.DIRECTORY_PICTURES); 
       pictureImagePath = storageDir.getAbsolutePath() + "/" + imageFileName; 
       file = new File(pictureImagePath); 
       outputFileUri = Uri.fromFile(file); 
       Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       camera.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
       startActivityForResult(camera, REQUEST_IMAGE_CAPTURE); 
      } 
     }); 


@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK && null != data) { 
try { 

        b = MediaStore.Images.Media.getBitmap(this.getContentResolver(), outputFileUri); 
        String filename123 = "myphoto.jpg"; 
        FileOutputStream out = this.openFileOutput(filename123, Context.MODE_PRIVATE); 
        b.compress(Bitmap.CompressFormat.JPEG, 100, out); 
        out.close(); 
        b.recycle(); 
        Intent in1 = new Intent(this, ongallery.class); 
        in1.putExtra("picture", filename123); 
        startActivity(in1); 
       }catch(Exception e) 
       { 
        Toast.makeText(this,"You got Error!",Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } catch (Exception e) { 
      Toast.makeText(this,"Something went wrong",Toast.LENGTH_SHORT).show(); 
     } 
    } 


//OnaGallery.java 
public class ongallery extends Activity { 
    public ImageView imgView; 
    int xDim; 
    int yDim; 
String filename; 
    public Bitmap finale = null ; 
    public Bitmap bmp = null; 
    public Bitmap photoEdit; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.ongallery); 
     imgView = (ImageView) findViewById(R.id.imgView); 
     xDim = imgView.getWidth(); 
     filename = getIntent().getStringExtra("picture"); 
     try { 
      FileInputStream is = this.openFileInput(filename); 
      bmp = BitmapFactory.decodeStream(is); 
      is.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Bitmap finalPhoto = decoder(filename,400,400); 
      imgView.setImageBitmap(finalPhoto); 
      } 
    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
    } 
    public Bitmap decoder(String filename, int reqWidth, int reqHeight) { 
     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     String filepath = getFileStreamPath(filename).getPath(); 
     BitmapFactory.decodeFile(filepath, options); 
     options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 
     options.inJustDecodeBounds = false; 
     finale = BitmapFactory.decodeFile(filepath, options); 
     return finale; 
    } 
    int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { 
     int inSampleSize = 1; 
     if (options.outHeight > reqHeight || options.outWidth > reqWidth) { 
      final int halfHeight = options.outHeight/2; 
      final int halfWidth = options.outWidth/2; 
      while ((halfHeight/inSampleSize) > reqHeight 
        && (halfWidth/inSampleSize) > reqWidth) { 
       inSampleSize *= 2; 
      } 
     } 
     return inSampleSize; 
    } 
} 
+0

что ongallary.class? – Nishith

+0

Его класс Activity, который содержит ImageView, к которому я буду добавлять изображение. –

+0

вы пробовали отлаживать свой код, чтобы узнать, где он собирается после того, как вы создадите намерение перейти к своей ongallary активности? – Nishith

ответ

2

Класс для разрешения камеры разрешения проверки

public class Utility { 
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123; 
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
public static boolean checkPermission(final Context context) 
{ 
    int currentAPIVersion = Build.VERSION.SDK_INT; 
    if(currentAPIVersion>=android.os.Build.VERSION_CODES.N) 
    { 
     if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) { 
       AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); 
       alertBuilder.setCancelable(true); 
       alertBuilder.setTitle("Permission necessary"); 
       alertBuilder.setMessage("External storage permission is necessary"); 
       alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
        public void onClick(DialogInterface dialog, int which) { 
         ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
        } 
       }); 
       AlertDialog alert = alertBuilder.create(); 
       alert.show(); 
      } else { 
       ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
      } 
      return false; 
     } else { 
      return true; 
     } 
    } else { 
     return true; 
    } 
} 

}

Теперь проверить разрешение, прежде чем стрелять камеру Intent

boolean permissionCheck = Utility.checkPermission(getActivity()); 
    if (permissionCheck) { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, CAMERA_REQUEST); 
    } 

Сейчас в onActivityResult() выглядят как

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == CAMERA_REQUEST) 
      bitmap = (Bitmap) data.getExtras().get("data"); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 

    File destination = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); 

    FileOutputStream fo; 
    try { 
     destination.createNewFile(); 
     fo = new FileOutputStream(destination); 
     fo.write(bytes.toByteArray()); 
     fo.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    bitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, false); 
    // Toast.makeText(SignUpActivity.this, String.valueOf(destination), Toast.LENGTH_LONG).show(); 
    imageView.setImageBitmap(bitmap); 
    } else if (resultCode == RESULT_CANCELED) { 
     Toast.makeText(getActivity(), "Cancelled", 
       Toast.LENGTH_SHORT).show(); 
    } 

} 

Разрешения в AndroidMenifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Надеется, что это поможет.

+0

Я использовал этот метод. Но в этой строке кода: bitmap = (Bitmap) data.getExtras(). Get ("data"); Это будет только миниатюра изображения, а не полноразмерное изображение. Следовательно, у ImageView будет очень маленькая фотография для отображения (миниатюра), которую я пытаюсь избежать. –

+0

make bitmap как glbal field –

1

Если вы используете свой код на андроида> = 6 вам необходимо предоставить разрешения на приложение с устройства перед запуском и после установки ? Вы сделали это ? Это можно сделать из приложения info/settings menu.

Перейти к

Настройки -> Приложения -> (Выберите приложение) -> Разрешения -> (включить все разрешения)

+0

Я протестировал это приложение на Android-устройстве с Android-версией 5.2.2 –

+0

Тогда это может быть проблема с отображением изображения в вашей ongallary активности. Вы пробовали его переубедить? – Nishith

+0

Да, я сделал это. Я также добавил код ongallery.java в вопросе. Вы можете проверить это. –

Смежные вопросы