2017-10-05 177 views
0

我无法从相机拍摄照片,然后将其存储为位图对象。我只能找到解决方案,将缩略图作为位图使用。我怎样才能做到这一点?如何从全尺寸相机拍摄照片? (Android Java)

下面是代码:

public boolean pickImageFromCamera(View View) { 

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File photo; 
    try 
    { 
     // place where to store camera taken picture 
     photo = this.createTemporaryFile("picture", ".jpg"); 
     photo.delete(); 
    } 
    catch(Exception e) 
    { 

     System.out.println("ERROR TAKING PICTURE"); 
     return false; 
    } 
    mImageUri = Uri.fromFile(photo); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); 
    //start camera intent 
    activity.startActivityForResult(intent, REQUEST_CODE2); 


    return true; 
} 


private File createTemporaryFile(String part, String ext) throws Exception 
{ 
    File tempDir= Environment.getExternalStorageDirectory(); 
    tempDir=new File(tempDir.getAbsolutePath()+"/.temp/"); 
    if(!tempDir.exists()) 
    { 
     tempDir.mkdirs(); 
    } 
    return File.createTempFile(part, ext, tempDir); 
} 

public void pickImageFromFolder(View View) { 
    Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(pickPhoto , REQUEST_CODE);//one can be replaced with any action code 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == REQUEST_CODE2 && resultCode == Activity.RESULT_OK) 
     try { 
      // We need to recyle unused bitmaps 
      if (bitmap != null) { 
       bitmap.recycle(); 
      } 

      Bitmap bitmap = null; 

      this.getContentResolver().notifyChange(mImageUri, null); 
      ContentResolver cr = this.getContentResolver(); 
      try 
      { 
       bitmap = android.provider.MediaStore.Images.Media.getBitmap(cr, mImageUri); 
       imageView.setImageBitmap(bitmap); 
      } 
      catch (Exception e) 
      { 
       System.out.println("Failed to load"); 
      } 

      bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 

      this.UPLOAD_URL = Config.webSiteUrl + "?action=uploadFile&username=" + this.username + "&password=" + this.password + "&baustelleid=" + Fotos.this.baustelleid; 


      if(bitmap != null) { 
       uploadImage(bitmap, this.UPLOAD_URL); 
      } 
     } catch (Exception e) { 
      System.out.println("Fehler 1"); 
     } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

它用的System.out.println( “ERROR拍照”)结束;似乎没有写入存储的权限。我该如何改变这一点?

+0

向我们展示您尝试过的代码无效。 – csmckelvey

回答

0

调用此方法后,该按钮等得到onActivityResult

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; 
     File photoThumbnailFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 

     } 
     // Continue only if the File was successfully created 
     if (photoFile != null) { 
      photoURI = FileProvider.getUriForFile(this, 
        "com.example.yourfileprovider", 
        photoFile); 

      photoThumbnailURI = FileProvider.getUriForFile(this, 
        "com.example.yourfileprovider", 
        photoThumbnailFile); 

      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      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 = getExternalFilesDir(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(); 
    return image; 
} 

这种方法时会发生相机拍完照片

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
      Toast.makeText(this, "Image saved", Toast.LENGTH_SHORT).show(); 

      bitmap = null; 
      try { 
       bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), photoURI); 
       mImageView.setImageBitmap(bitmap); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
+0

谢谢,这是我想要的。 – ubik

相关问题