2011-12-29 75 views
2

我在按鈕上使用onClick捕捉圖像。拍照後更新圖片庫不顯示所有圖片Android相機

PictureCallback myPictureCallback_JPG = new PictureCallback() { 

    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 

     FileOutputStream outStream = null; 
     try { 
      // Write to SD Card 
      outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis())); 
      outStream.write(arg0); 
      outStream.close(); 
      Toast.makeText(Photo.this, "Image Saved to SD Card", Toast.LENGTH_SHORT).show(); 
      System.out.println(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     camera.startPreview(); 
    }}; 

圖像被保存在SD卡中。 然後用戶點擊發送按鈕,打開一個佈局,點擊ImageView打開一個圖像庫並點擊一個特定的圖像,URI被選中。

imageAttachPhoto = (ImageView)findViewById(R.id.imageViewPhotoOne); 
    imageAttachPhoto.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE); 
     } 
    }); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Uri selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri); 
      System.out.println("Image Path : " + selectedImagePath); 
      imageAttachPhoto.setImageURI(selectedImageUri); 
     } 
    } 
} 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

但我不能夠查看圖像搶購在畫廊的代碼,但可以通過FileBrowser看到的圖像,當我在電腦打開SD卡,我可以看到的圖像,然後在Android顯示畫廊圖像也在代碼中。 讓我知道問題是什麼以及如何解決問題,期待您的回覆。 謝謝。

回答

6

Android掃描媒體文件和使用content provider時顯示的那些...當你運行你的應用程序,並採取新的相機,當時你只是拍了新的照片,但默認畫廊不知道這些新照片,因爲他們不是在內容提供商的媒體列表中。

我認爲在拍完照片之後和打電話給畫廊之前添加這一行會顯示從相機拍攝的所有最新照片。

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

這將扔在奇巧+一個SecurityException。嘗試Vossi的方法,或者使用MediaScannerConnection這裏使用:stackoverflow - @absk

+1

加上一個絕對完美...得到它的工作...但是,每當我想在肖像模式下的圖像方向將旋轉90度。任何關於如何設置它的想法。謝謝。 – Mukunda 2011-12-29 12:36:59

+0

嗯..沒有得到你完全正確的原因你打電話給默認intent..anyway..if如果不通過互聯網解決方案,然後再提出一個問題,所以人們會幫助你。 – MKJParekh 2011-12-29 12:45:55

+1

這將在KitKat +中引發SecurityException。嘗試Vossi的方法,或者使用MediaScannerConnection這裏使用:http://stackoverflow.com/questions/18624235/android-refreshing-the-gallery-after-saving-new-images – absk 2014-06-20 06:14:36

7

即使這是大一點!但我也有同樣的問題。 Soni的答案很有用,但每次都需要Media Scanner在整個目錄中查找新文件。你也可以註冊你的新文件,看起來性能更高

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+f.getAbsolutePath()))); 

f是你想註冊的文件。

+1

這太好了。順便說一句,代替Uri.parse(),你也可以直接使用Uri.fromFile(f)。看起來更好看,並做同樣的事情。 :) – ghost23 2013-05-19 15:28:58

+0

正是我在找什麼,比掃描整個目錄快得多。我正在使用_fromFile_方法,它運行良好。 – piratemurray 2013-09-13 23:24:49

+0

Uri.fromFile(文件)它更好 – 2014-04-24 08:47:58

-1
  1. 簡單的答案是,首先運行應用程序,從您的應用程序的相機捕獲圖像,然後簡單地在您的設備的圖庫中看到。

  2. 你不能在那個時候一次見最後捕獲圖像的圖像由您的應用程序重新啓動您的設備,可以看到你在過去的捕捉圖像是在你的設備的畫廊。

  3. 一件事之後,設備重啓然後再次打開自己的應用程序,並再次捕捉你的應用程序一個圖像,看到你的第二個捕獲圖像可以在畫廊看到,而無需在設備中的任何行動。

相關問題