2010-07-07 6 views
3

Vous devrez supporter avec moi, je suis très nouveau sur Android et mes compétences Java sont "rouillées" au mieux. J'ai eu beaucoup de plaisir à faire fonctionner le lecteur de codes-barres avec très peu d'efforts, mais le côté caméra ne se révèle pas aussi simple. J'ai une classe d'activité principale qui appelle un code à barres au démarrage;Enregistrer des photos de l'appareil photo dans Android

/** 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"); 
     } 
    }); 
} 

travail jusqu'à présent et je manipuler l'intention, comme indiqué:

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

Je le dos d'appel mis en place (actuellement sans code en eux), mais après le code-barres est scanné, le dispositif affiche juste un écran noir. Je dois alors redémarrer l'appareil après avoir débogué l'application parce que la caméra n'est plus disponible (je suspecte que je n'ai pas nettoyé ma référence pour que l'appareil photo soit verrouillé sur mon application)

Quelqu'un peut-il m'expliquer comment je vais sur l'utilisation de l'appareil photo et enregistrer la sortie sur la carte SD (je prévois d'utiliser un dossier spécifique sur la carte SD avec quelque chose comme:

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

pour enregistrer un nouveau nom de fichier non-conflit dans le dossier.

(Le dispositif est un mini-pulse T-Mobile (fabriqué par Huawei je crois) et j'ai vu d'autres personnes dire qu'il y a des problèmes de pilotes avec le appareil photo mais je suis plus enclin à croire que c'est un manque de compréhension plutôt qu'un problème de matériel.)

Merci d'avance pour toute aide que vous pouvez donner à ce sujet.

Répondre

0

essayer ceci:

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

il pourrait être plus petit et plus propre que cela, mais cela ne toutes les choses que vous avez demandé

Questions connexes