2015-12-04 10 views
2

Изображение, взятое с камеры, не установлено, хотя код, который я использую, находится на веб-сайте разработчика Android. Пожалуйста помоги. Я не понимаю, что я должен делать. Иногда метод OnActivityResult также не вызывается. Вот код, который я использую:Изображение с камеры не установлено в ImageView

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button = (Button) findViewById(R.id.button); 
     mImageView = (ImageView) findViewById(R.id.imageView); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dispatchTakePictureIntent(); 
      } 
     }); 
    } 


    private void dispatchTakePictureIntent() { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     // Ensure that there's a camera activity to handle the intent 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      // Create the File where the photo should go 
      File photoFile = null; 
      try { 
       photoFile = createImageFile(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
      // Continue only if the File was successfully created 
      if (photoFile != null) { 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
         Uri.fromFile(photoFile)); 
       startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
      } 
     } 
    } 

    private File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File storageDir = Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES); 
     File image = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       storageDir  /* directory */ 
     ); 

     // Save a file: path for use with ACTION_VIEW intents 
     mCurrentPhotoPath = "file:" + image.getAbsolutePath(); 
     System.out.println("Created: " + mCurrentPhotoPath); 
     galleryAddPic(); 
     return image; 
    } 


    private void galleryAddPic() { 
     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     File f = new File(mCurrentPhotoPath); 
     Uri contentUri = Uri.fromFile(f); 
     mediaScanIntent.setData(contentUri); 
     this.sendBroadcast(mediaScanIntent); 
    } 

    private void setPic() { 
     // Get the dimensions of the View 
//  int targetW = mImageView.getWidth(); 
//  int targetH = mImageView.getHeight(); 
// 
//  // Get the dimensions of the bitmap 
//  BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
//  bmOptions.inJustDecodeBounds = true; 
//  BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
//  int photoW = bmOptions.outWidth; 
//  int photoH = bmOptions.outHeight; 
// 
//  // Determine how much to scale down the image 
//  int scaleFactor = Math.min(photoW/targetW, photoH/targetH); 
// 
//  // Decode the image file into a Bitmap sized to fill the View 
//  bmOptions.inJustDecodeBounds = false; 
//  bmOptions.inSampleSize = scaleFactor; 
//  bmOptions.inPurgeable = true; 

     Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath); 
     mImageView.setImageBitmap(bitmap); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     Log.d("", "onActivityResult: "+mCurrentPhotoPath); 
     if (requestCode == REQUEST_IMAGE_CAPTURE) { 
      Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath); 
      mImageView.setImageBitmap(bitmap); 
     } 
    } 
} 
+0

проверить, если ваш mCurrentPhotoPath одно и то же в оба случаях, прежде чем т.е. запустить приложение камеры и после возвращения из приложения камеры. –

+0

Вы используете REQUEST_TAKE_PHOTO во время запуска активности и REQUEST_IMAGE_CAPTURE в onActivityResult. Я думаю, что они оба должны быть одинаковыми. – Abdullah

ответ

0

Если вы начинаете действие для результата, код запроса идентифицирует запрос. Так что, если вы начали деятельность камеры с запросом кода, REQUEST_TAKE_PHOTO, то вы должны использовать один и тот же код запроса в результате деятельности т.е.

onActivityResult

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
    Log.d("", "onActivityResult: "+mCurrentPhotoPath); 
    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) { 
      Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath); 
      mImageView.setImageBitmap(bitmap); 
     } 
    } 

UPDATE

Поскольку вы хотите decodeFile, ваш mCurrentPhotoPath должен быть абсолютным путем доступа к файлам, а не uri.So удалить «файл:» от mCurrentPhotoPath

createImageFile

private File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File storageDir = Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES); 
     File image = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       storageDir  /* directory */ 
     ); 

     // Save a file: path for use with ACTION_VIEW intents 
     mCurrentPhotoPath = image.getAbsolutePath(); 
     System.out.println("Created: " + mCurrentPhotoPath); 
     galleryAddPic(); 
     return image; 
    } 

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

+0

Спасибо человек. Любая идея, что делать теперь, когда битмап возвращает null? То, что фотопата одинакова в обоих местах – sam24

+0

Я обновил свой ответ .. –

+0

Да, я тоже это пробовал .. Ничего еще – sam24

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