2012-12-10 23 views
6

मैं कैमरा ऐप पर काम कर रहा हूं, मैं चाहता हूं कि जब मैं "कैप्चर" बटन दबाता हूं तो यह एक तस्वीर लेता है और इसे एसडीकार्ड में सहेजता है इसे गैलरी में देखा जा सकता है।एंड्रॉइड कस्टम कैमरा ऐप तस्वीर गैलरी में दिखाई नहीं दे रही है जब तक कि मैं अपने फोन को रीबूट नहीं करता

हालांकि वर्तमान में यह सहेजने में विफल रहता है कि मैं इसे कैसे चाहता हूं। वर्तमान में जब मैं कैप्चर दबाता हूं तो यह एक तस्वीर लेता है, लेकिन तस्वीर पूरी तरह से मेरे फोन को पुनरारंभ करने के बाद गैलरी में दिखाया जाता है।

यह समस्या सप्ताहों के लिए मेरे साथ गड़बड़ कर रही है, मैंने ज्यादातर ट्यूटोरियल एंड्रॉइड दिया है।

यहां मुख्य कक्षा के लिए मेरा कोड है जो चित्रों को संभालता है।

private PictureCallback mPicture = new PictureCallback() 
    { 

    @Override 
    public void onPictureTaken(byte[] data, Camera camera) 
     { 
     File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); 
     if (pictureFile == null){ 
      Log.d(TAG, "Error creating media file, check storage permissions: "); 
      return; 
     } 

     try { 
      FileOutputStream fos = new FileOutputStream(pictureFile); 
      fos.write(data); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      // Log.d(TAG, "File not found: " + e.getMessage()); 
     } catch (IOException e) { 
     // Log.d(TAG, "Error accessing file: " + e.getMessage()); 
     } 
    } 
}; 


private static File getOutputMediaFile(int type){ 
    // To be safe, you should check that the SDCard is mounted 
    // using Environment.getExternalStorageState() before doing this. 

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "MyCameraApp"); 
    // This location works best if you want the created images to be shared 
    // between applications and persist after your app has been uninstalled. 

    // Create the storage directory if it does not exist 
    if (! mediaStorageDir.exists()){ 
     if (! mediaStorageDir.mkdirs()){ 
      Log.d("MyCameraApp", "failed to create directory"); 
      return null; 
     } 
    } 

    // Create a media file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    File mediaFile; 
    if (type == MEDIA_TYPE_IMAGE){ 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
     "IMG_"+ timeStamp + ".jpg"); 
    } else if(type == MEDIA_TYPE_VIDEO) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
     "VID_"+ timeStamp + ".mp4"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 

public void onClick(View v) { 

    mCamera.takePicture(null, null, mPicture); 
    Context context = getApplicationContext(); 
    CharSequence text = "Click Detected"; 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 

    } 

मेरे लॉग बिल्ली जब मैं कब्जा क्लिक

स्तर निम्नलिखित पता चलता है: ई टैग: कैमरा पाठ: CAMERA_MSG_RAW_IMAGE के लिए handlemessage में

मेरे अनुमतियाँ हैं

uses-permission android:name="android.permission.CAMERA" 
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 

किसी भी मदद की बहुत सराहना की है। धन्यवाद

उत्तर

6

यह सवाल Image, saved to sdcard, doesn't appear in Android's Gallery app का डुप्लिकेट (ShadowGod द्वारा विशेष रूप से इस सवाल का जवाब)

अपने कोड को ठीक करने के लिए, (fos.close के बाद onPictureTaken के लिए निम्न जोड़ें) है

File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
    Environment.DIRECTORY_PICTURES), "MyCameraApp"); 
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
    Uri.parse("file://"+ mediaStorageDir))); 
+0

किटकैट पर काम नहीं करता। अगर कोई है तो कृपया कामकाज में मदद करें? –

2
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

करता है किटकैट पर काम नहीं लग रहा है। यह अनुमति अस्वीकार अपवाद फेंकता है और ऐप दुर्घटनाग्रस्त हो जाता है। तो इसके लिए, मैंने निम्नलिखित किया है,

String path = mediaStorageDir.getPath() + File.separator 
       + "IMG_Some_name.jpg"; 
CameraActivity.this.sendBroadcast(new Intent(
         Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri 
         .parse("file://" + path))); 

उम्मीद है कि यह मदद करता है।