2015-08-03 22 views
5

Sono nuovo nello sviluppo di Android, sto facendo una piccola applicazione per catturare l'immagine USB Camrea usando UVCCamera.L'immagine catturata non è stata mostrata nella galleria ma è stata memorizzata correttamente nella sdcard

ho catturato un'immagine utilizzando UVCCamera e conservati in sdcard come questo

File filepath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "IMG_"+getDateTime() + ".jpg"); 
mCameraClient.captureStill(filepath.toString()); 

qui mCameraClient sarà intract con UVC fotocamera e acquisizione di immagini e conservare in quel percorso e sarà richiamata metodo onCaptureDone

@Override 
     public void onCaptureDone(final String path) { 
      // TODO Auto-generated method stub 
      Log.e(TAG, "onCaptureDone called"); 
      getActivity().runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        //Toast -- Images Saved. 
       } 
      }); 
     } 
    }; 

Quindi invoco la galleria da un pulsante immagine onClickListener

private MediaScannerConnection conn; 

File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)); 
    File[] mImagefile = folder.listFiles(new FilenameFilter() { 
        public boolean accept(File dir, String filename) { 

          return filename.endsWith(".jpg"); 
        } 
       }); 

       if (mImagefile.length > 0) { 

        SCAN_PATH = folder.toString() + "/" 
          + mImagefile[mImagefile.length -1].getName(); 
        Log.e(TAG, "SCAN PATH = " + SCAN_PATH); 

        if (conn != null) { 
         conn.disconnect(); 
        } 

        conn = new MediaScannerConnection(this, this); 
        conn.connect(); 
       } else { 
        //Toast -- No Images Available 
       } 

Se il filtro ha avuto successo.

@Override 
    public void onMediaScannerConnected() { 
     // TODO Auto-generated method stub 
     Log.e(TAG, "onMediaScannerConnected"); 
     ; 
     conn.scanFile(SCAN_PATH, null); 
    } 

    @Override 
    public void onScanCompleted(String path, Uri uri) { 
     // TODO Auto-generated method stub 
     try { 
      Log.e(TAG, "OnCompleted path = " + path); 
      if (uri != null) { 
       Intent intent = new Intent(Intent.ACTION_VIEW); 
       intent.setData(uri); 
       startActivity(intent); 
      } 
     } finally { 
      Log.e(TAG, "OnCompleted Disconnecting"); 
      conn.disconnect(); 
      conn = null; 
     } 
    } 

Qui il mio problema era nella galleria che tutte le immagini catturate non venivano visualizzate.

E ho controllato nella directory salvati, non tutte le immagini è stato memorizzato con successo. [Immagini non è stato danneggiato, ho verificato]

E ho controllato in applicazione galleria di default, in quanto anche quelle immagini non mostrava .

Per favore aiutatemi su questo.

Edit 1:

ho osservato una cosa, quando mi cattura e immagine salvata, non mostrando in galleria, ma dopo qualche tempo, come è stato il suo 2-3 ore appare in galleria. VOGLIO SAPERE PERCHÉ MI PIACE QUESTO ACCADERE?

Grazie

+0

È necessario informare lo scanner multimediale della nuova immagine. Consulta http://stackoverflow.com/questions/4753252/scan-android-sd-card-for-new-files/23078323#23078323 –

+1

@HarishSridharan: Ho provato, non funzionante – iosLearner

+0

Aggiunta la mia risposta. –

risposta

7

Inserire questa riga di codice dopo aver catturato un'immagine e salvarla nella scheda SD.

File image_path="your image path"; 
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(image_path))); 

Qui percorso_immagine viene salvato il percorso del file immagine

Spero che questo ti aiuta ..!

0

è necessario inserire nella galleria dei media e creare una miniatura per esso. Altrimenti, fino a quando la galleria multimediale non esegue la scansione (di solito pianificata come scansione di nuove immagini una volta ogni due ore) non le vedrai nella galleria.

Utilizzare quanto segue per creare una voce e creare una miniatura per la galleria multimediale.

String imageFilename = "IMG_"; 
    String originalPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath(); 
    String path = ""; 


    File filepath = new File(originalPath + imageFilename+".jpg"); 
    mCameraClient.captureStill(filepath.toString()); 


    try { 
     newPath = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), originalPath, imageFilename, "Captuted Image"); 
    }catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }