2010-07-07 65 views
3

您必须忍耐,我对Android非常陌生,我的Java技能充其量也是“生锈的”。在Android中从相机中保存图片

我非常激动地得到条码扫描位,确实工作很少,但相机方面的事情确实并不容易。

我有一个主要的Activity类,启动时需要一个条形码;

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button cameraButton = (Button) findViewById(R.id.cameraButton); 
    cameraButton.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      IntentIntegrator.initiateScan(MakroDroidActivity.this, "Please scan order barcode", "Please scan a valid order barcode", "Yes", "No"); 
     } 
    }); 
} 

工作至今,我正确处理如图所示的意图:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      switch(requestCode) { 
       case IntentIntegrator.REQUEST_CODE: { 
        if (resultCode != RESULT_CANCELED) { 
         IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
         if (scanResult != null) { 
          String upc = scanResult.getContents(); 
          if (upc.startsWith("ORD")) 
          { 
           //we have a valid order barcode 
           Camera cam = Camera.open(); 
           cam.takePicture(shutterCallback, rawCallback, jpegCallback); 
          } 
          else 
          { 
           IntentIntegrator.initiateScan(MakroDroidActivity.this, "Please scan again", "Please scan a valid order barcode", "Yes", "No"); 
          } 
         } 
        } 
        break; 
       } 
      } 
     } 

我有回调设置(目前正与他们没有代码),但条形码扫描后,该设备只是显示一个黑屏。然后我需要在调试应用程序后重新启动设备,因为相机不再可用(我怀疑我没有清理我的参考,因此相机锁定到我的应用程序)

有人可以向我解释我怎么去有关使用相机和保存输出到SD卡(我打算使用一个特定的文件夹在SD卡上的东西,如:

filepath = filepath + UUID.randomUUID().toString() + ".jpg"; 

到一个新的,不冲突的文件名保存到文件夹。 (设备是一个T-Mobile脉冲迷你(我相信华为制造),我看到其他人说有驱动程序问题与相机,但我更倾向于相信这是缺乏我的理解,而不是硬件问题。)

在此先感谢您提供的任何帮助。

回答

0

尝试了这一点:

public void takePhoto() 
    { 
    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this))); 
    startActivityForResult(intent, 1); 
    } 

private File getTempFile(Context context) 
    { 
    File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName()); 
    if(!path.exists()) 
     path.mkdir(); 
    return new File(path, "debris.jpg"); 
    } 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
    if (resultCode == RESULT_OK) 
     { 
     switch(requestCode) 
      { 
      case 1: 
      final File file = getTempFile(this); 
      try 
       { 
       Media.getBitmap(getContentResolver(), Uri.fromFile(file)); 
       image_string = Uri.fromFile(file).toString(); 
       } 
      catch (FileNotFoundException e) 
       { 
       Toast.makeText(getApplicationContext(), "file not found exception", Toast.LENGTH_SHORT).show(); 
       } 
      catch (IOException e) 
       { 
       Toast.makeText(getApplicationContext(), "ioexception", Toast.LENGTH_SHORT).show(); 
       } 
      break; 
      } 
     } 
    } 
} 

这可能是比小和更清洁的,但这样做你问

的事情