2015-07-11 98 views
0

我正在制作一个应用程序,该应用程序可以从相机或图库中获取图像并将其显示在ImageView中。 我得到这个从Android Developers Tutorial. 我使用的是DialogInterface这一个:Android:使用相机将图像显示到ImageView并保存到图库

private void selectImage() { 
     final CharSequence[] items = { "Take Photo", "Choose from Library", 
       "Cancel" }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(ReportIncident.this); 
     builder.setTitle("Add Picture"); 
     builder.setItems(items, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int item) { 
       if (items[item].equals("Take Photo")) { 
        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 

         try { 
          photoFile = createImageFile(); 
          takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 

          startActivityForResult(takePictureIntent, 0); 


         } catch (IOException ex) { 
          // Error occurred while creating the File 
          ex.printStackTrace(); 
         } 

        } 
       } else if (items[item].equals("Choose from Library")) { 
        Intent intent = new Intent(
          Intent.ACTION_PICK, 
          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        intent.setType("image/*"); 
        startActivityForResult(
          Intent.createChooser(intent, "Select File"), 1); 
       } else if (items[item].equals("Cancel")) { 
        dialog.dismiss(); 
       } 
      } 
     }); 
     builder.show(); 
    } 

createImageFile创建目录/文件,其中的照片将被保存:

private File createImageFile() throws IOException { 
    // Create an image file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = "FIREFLOOD_" + 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(); 
    return image; 
} 

“选择从图书馆部分已经在工作,但我对'拍照'部分有问题。特别是在这条线:

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); 
galleryAddPic(); 
startActivityForResult(takePictureIntent, 0); 

具有startActivityOnResult前putExtra()和galleryAddPic()() 崩溃的应用程序拍照后却成功地将图像保存到 画廊。但从代码中删除这两种方法会将拍摄的照片 显示在ImageView reportImage上。

startActivityForResult显示通过activityOnResult带到ImageView的图像:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (resultCode == Activity.RESULT_OK) { 
      if (requestCode == 1) { 

       onSelectFromGalleryResult(data); 
      }else if (requestCode == 0) { 
       Bundle extras = data.getExtras(); 
       Bitmap imageBitmap = (Bitmap) extras.get("data"); 
       reportImage.setImageBitmap(imageBitmap); 




      } 
     } 
    } 

保存图像画廊由galleryAddPic执行:

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); 
    } 

的问题是我在哪里可以把这两种方法(putExtra和 galleryAddPic)使这两个函数起作用:

  1. 显示拍摄到ImageView的照片
  2. 将照片同时保存到图库中。

我无法完成这两项工作。请帮忙。我试图在onAcitivityResult上放置 putExtra和galleryAddPic,但它仍然 崩溃。没有putExtra,galleryAddPic将不起作用。

+0

我必须工作在此的是Android 4.4.2奇巧 – Jaye

回答

1
+0

谢谢,但它不会在奇巧工作。 – Jaye

+0

其工作对我来说iam也使用相同的代码与它相同的设备kitkat 4.4.4它对我工作很好 –

+0

吉恩谢谢!我发现每次调用startResultforActivity时都会得到一个NullPointerException。我重写了两个方法:onSavedInstanceState和onRestoreInstanceState来恢复文件并使用它将图像显示到imageview .. – Jaye

相关问题