2012-10-12 41 views
5

संभव डुप्लिकेट:
Using Camera and storing captured result in SDCard in androidइरादे से एक कैमरा एप्लिकेशन खोलें और पर एसडी चित्र बचाने के लिए और imageView

मैं कैमरा ऐप से चित्र प्राप्त करने, पर SD और सेट में सहेज चाहते imageView। मैंने नीचे एक कोड बनाया है। बचत और छवि देखें कभी-कभी काम करता है। लेकिन कभी-कभी तस्वीर एसडी पर सहेजी जाती है और छवि दृश्य काम नहीं करता है।

जब छवि दृश्य काम नहीं करता है, ऐसा लगता है कि mututriActivityResult पर शून्य हो जाता है।

मैंने क्लर्कबटन में साझा किए गए संदर्भों पर एक muutUri को सहेजने का प्रयास किया है। मैं यूटिविटी रिसेट में यूरी देख सकता हूं लेकिन छवि दृश्य काम नहीं करता है। इस समय, mututri भी शून्य है।

public void clkbutton(View v){ 
    Intent intent = new Intent(); 

    // open camera app 
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 

    // save data in SD card 
    Date date = new Date(); 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd-kk-mm-ss"); 
    String newPicFile = df.format(date) + ".jpg"; 
    mNewPicFile = newPicFile; 
    String outPath = "/sdcard/" + newPicFile; 
    File outFile = new File(outPath); 
    mOutUri = Uri.fromFile(outFile); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutUri);  
    startActivityForResult(intent, REQUEST_CAPTURE_IMAGE); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    ImageView imageView = (ImageView) findViewById(R.id.image_view); 
    imageView.setImageURI(mOutUri);  
} 

यह इतना अजीब है कि कभी-कभी त्रुटियां होती हैं और कभी-कभी काम करती हैं।

उत्तर

0

आपके द्वारा सेट करने से पहले सक्रियता में परिणाम ImageUri आपको यह जांचना चाहिए कि फ़ाइल मौजूद है या नहीं। जब ऐप अभिविन्यास बदलता है तो आप mututri सामग्री खो सकते हैं, और जब आप कैमरा खोलते हैं तो यह खुशी होती है। आपको SaveInstanceState पर गतिविधि में कार्यान्वित करना चाहिए जहां आप वरीयताओं में अपनी यूरी और ऑनस्टोर इंस्टेंसस्टेट में स्टोर करते हैं जहां आप अपना यूरी बहाल करते हैं।

0

कोशिश निम्नलिखित कोड:

static Uri capturedImageUri=null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    this.imageView = (ImageView)this.findViewById(R.id.imageView1); 
Button photoButton = (Button) this.findViewById(R.id.button1); 
    photoButton.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    Calendar cal = Calendar.getInstance(); 
    File file = new File(Environment.getExternalStorageDirectory(), (cal.getTimeInMillis()+".jpg")); 
    if(!file.exists()){ 
    try { 
    file.createNewFile(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
     }else{ 
    file.delete(); 
    try { 
    file.createNewFile(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 
capturedImageUri = Uri.fromFile(file); 
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
i.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); 
startActivityForResult(i, CAMERA_RESULT); 
    } 
}); 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_REQUEST) { 
    //Bitmap photo = (Bitmap) data.getExtras().get("data"); 
    //imageView.setImageBitmap(photo); 
    try { 
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), capturedImageUri); 
    imageView.setImageBitmap(bitmap); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
    e.printStackTrace(); 
     } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
     } 
    } 
    } 

और यह भी न कुछ अनुमतियां जोड़ने के लिए भूल जाते हैं में एंड्रॉयड manifets तरह दायर:

`note: add permission WRITE_EXTERNAL_STORAGE in manifest file.` 
+0

अपनी टिप्पणी के लिए धन्यवाद। मैंने आपके कोड की कोशिश की है लेकिन यह अभी भी कभी-कभी काम नहीं करता है। आप को क्या लगता है कि समस्या क्या है?? – Jason