2013-02-22 169 views
1

使用相机意图在没有SD卡的情况下拍摄照片

当没有SD卡时,我无法使用相机。

当有SD卡时,使用照相机是微不足道的,例如,

http://www.vogella.com/articles/AndroidCamera/article.html +大量的其他例子。但是,我需要让我的应用可用于没有SD卡的设备(例如Sony Xperia系列)。我尝试修改代码,以便使用内部存储器(我认为):

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
File file = new File(getDir("myDirec", Context.MODE_WORLD_WRITEABLE), "tmp_photo_" + String.valueOf(System.currentTimeMillis()) + ".jpg"); 
file.createNewFile(); 
mImageCaptureUri = Uri.fromFile(file); 

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri); 
intent.putExtra("return-data", true); 

然而,当结果是:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intentReturn) { 
    if (resultCode != RESULT_OK) 
     return; 

    String path = mImageCaptureUri.getPath(); 
    Bitmap bitmap = BitmapFactory.decodeFile(path); 

... 

bitmap为空。

这使我相信有一些权限问题....也许?

我试过一些其他的内部存储选项,例如http://developer.android.com/guide/topics/data/data-storage.html#filesInternal,例如getFilesDir()但结果相同:null bitmap

有没有人在没有SD卡的情况下使用相机有任何成功?

回答

2

试试这个。它的工作原理..

private Uri imageUri; 

    public void onClick(View arg0) { 
    switch (arg0.getId()) {  
     case R.id.btnImageCapture: 

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File dir = context.getDir("directory", Context.MODE_PRIVATE); 
    File photo = new File(dir, "Pic.jpg"); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, 
      Uri.fromFile(photo)); 
    imageUri = Uri.fromFile(photo); 
    startActivityForResult(intent, OPEN_CAMERA); 
        break; 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
    case OPEN_CAMERA: 
     if (resultCode == Activity.RESULT_OK) { 
      Uri selectedImage = imageUri; 
      getContentResolver().notifyChange(selectedImage, null); 
      ImageView imageView = (ImageView) findViewById(R.id.ImageView); 
      ContentResolver cr = getContentResolver(); 
      Bitmap bitmap; 
      try { 
       bitmap = android.provider.MediaStore.Images.Media 
       .getBitmap(cr, selectedImage); 

       imageView.setImageBitmap(bitmap); 
       Toast.makeText(this, selectedImage.toString(), 
         Toast.LENGTH_LONG).show(); 

      } catch (Exception e) { 
       Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT) 
         .show(); 

      } 
     } 
    } 
} 
+0

真棒,谢谢,工作。 – tomblah 2013-02-24 00:55:42

相关问题