2011-10-03 24 views
16

मैं कैमरे के इरादे से एक तस्वीर बनाना चाहता हूं और इसे डिफ़ॉल्ट डीसीआईएम फ़ोल्डर में सहेजना चाहता हूं। तब मैं पथ/फ़ाइल नाम प्राप्त करना चाहता हूं जहां चित्र संग्रहीत किया जाता है।कैमरा उद्देश्य परिणाम से पथ और फ़ाइल नाम प्राप्त करें

मैं निम्नलिखित कोड के साथ कोशिश कर रहा हूँ:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, TAKE_PICTURE); 
इस कोड के साथ

, कैमरा खुल जाता है और बाद मैं एक तस्वीर ले लिया है यह बंद कर देता है और डिफ़ॉल्ट छवि फ़ोल्डर (आमतौर पर/DCIM के लिए चित्र की बचत होती है/कैमरा या एसडीकार्ड/डीसीआईएम/कैमरा ...)

लेकिन अब मैं ली गई तस्वीर का पथ और फ़ाइल नाम कैसे प्राप्त कर सकता हूं? मैं onActivityResult में लगभग सब कुछ मैं

String result = data.getData(); 

और

String result = data.getDataString(); 

और

String result = data.toURI(); 

और

Uri uri = data.getData(); 

ई की कोशिश की कोशिश की है टीसी

मैंने इसके लिए समाधान खोजने के लिए पिछले दो दिनों की खोज की, वेब पर और स्टैक ओवरफ्लो पर कई लेख हैं लेकिन कुछ भी काम नहीं करता है। मुझे थंबनेल नहीं चाहिए, मैं केवल उस छवि को पथ (यूरी?) चाहता हूं जो कैमरे ने लिया है। जब मैं कोशिश :

किसी भी मदद

संपादन के लिए धन्यवाद

path=Environment.DIRECTORY_DCIM + "/test.jpg"; 
File file = new File(path); 
Uri outputFileUri = Uri.fromFile(file); 
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
startActivityForResult(intent, TAKE_PICTURE); 

यह test.jpg के रूप में लेकिन सामान्य छवि नाम 2011-10-03 के साथ छवि की दुकान नहीं है .. ... jpg (लेकिन यह भी ठीक है, मुझे केवल छवि के पथ की आवश्यकता है, इससे कोई फर्क नहीं पड़ता कि नाम क्या है)।

सादर

संपादित करें फिर

path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/"; 
File file = new File(path,"test111111111.jpg"); 
try { 
file.createNewFile(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
Uri outputFileUri = Uri.fromFile(file); 
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

startActivityForResult(intent, TAKE_PICTURE); 

जब मैं यह कोशिश है, यह छवि सही फ़ोल्डर में और दिए गए नाम (जैसे test111111.jpg) के साथ संग्रहीत करता है। लेकिन मैं अब एक्टिविटी रिसेट में फ़ाइलपैथ कैसे प्राप्त कर सकता हूं?

+6

आप allready पथ को जानें ... चूंकि आप अपनी फाइल बनाते हैं। आप फ़ाइल या पथ को अपनी गतिविधि –

उत्तर

1

जब आप शुरू कर रहे हैं ACTION_IMAGE_CAPTURE आप फ़ाइल जहाँ आप चित्र को सहेजना चाहते का URI के रूप में एक अतिरिक्त MediaStore.EXTRA_OUTPUT पारित कर सकते हैं।

यहाँ एक सरल उदाहरण है:

File file = new File(path); 
    Uri outputFileUri = Uri.fromFile(file); 

    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

    startActivityForResult(intent, TAKE_PICTURE); 

संपादित करें: मैं सिर्फ अपनी डिवाइस और file.createNewFile() पर की कोशिश की मेरे लिए समस्या हल हो।

+0

हाय के सदस्य चर के रूप में रख सकते हैं, आपके त्वरित उत्तर के लिए धन्यवाद, लेकिन यह अपेक्षा के अनुसार काम नहीं करता है। मैं उपरोक्त समझाऊंगा। – bihcoder

+0

मैंने कोड के साथ ऊपर जवाब दिया है। – bihcoder

+0

शायद एक मूर्ख सवाल ... क्या आपने मेनिफेस्ट में अनुमति दी है? android.permission.CAMERA? हाँ..कि बिना किसी अनुमति के काम कर सकते हैं –

6

तस्वीर दो बार संग्रहीत की जाएगी, पहले गैलरी फ़ोल्डर पर, और उस फ़ाइल के बाद जिसे आपने putExtra (MediaStore.EXTRA_OUTPUT, पथ) विधि पर निर्दिष्ट किया है।

आपको लगता है कि कर लिया पिछले चित्र प्राप्त कर सकते हैं:

/** 
* Gets the last image id from the media store 
* @return 
*/ 
private int getLastImageId(){ 
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA }; 
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC"; 
    Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy); 
    if(imageCursor.moveToFirst()){ 
     int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID)); 
     String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
     Log.d(TAG, "getLastImageId::id " + id); 
     Log.d(TAG, "getLastImageId::path " + fullPath); 
     imageCursor.close(); 
     return id; 
    }else{ 
     return 0; 
    } 
} 

यह नमूना पोस्ट के आधार पर किया गया था: Deleting a gallery image after camera intent photo taken

+1

अरे, यह कोड सैमसंग टैब पर काम करता है लेकिन लेनोवो और आई-बॉल टैब पर काम नहीं करता है, क्या कोई अन्य समाधान है ????? – Shubham

1

आप onActivityResult() में इस तरह का उपयोग कर सकते

if(requestCode==CAMERA_CAPTURE) 
    { 

     Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC"); 
     if(cursor != null && cursor.moveToFirst()) 
     { 
      do 
      { 
       String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA)); 
       Uri selectedImage = Uri.parse(picturePath); 

      } 
      while(cursor.moveToNext()); 
       cursor.close(); 
      File out = new File(picturePath); 
      try 
      { 
       mOriginal = decodeFile(out); 
      } 
      catch (IOException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


      mSelected.setImageBitmap(mOriginal); 
     } 
    } 
संबंधित मुद्दे