0

我正在使用InputStreamOutputStream將圖像從res/drawable保存到Gallery。它工作正常,並保存圖像。但問題是它不會更新圖庫中的圖像。如果我使用ES File Explorer檢查文件夾,那麼我可以在那裏看到圖像。我也檢查了ddms,它也會在write代碼執行時立即更新映像。

它工作正常,如果我保存服務器映像。如何防止這個問題?我想在Image保存後立即更新Gallery。

我也試過MediaScanner掃描文件夾,但沒有效果。

我的代碼:保存的圖像無法在Gallery中看到android

Toast.makeText(context, "Downloading Image...\nPlease Wait.", 
       Toast.LENGTH_LONG).show(); 

     File direct = new File(Environment.getExternalStorageDirectory() 
       + "/Images"); 

     if (!direct.exists()) { 
      direct.mkdirs(); 
     } 

     DateFormat dateFormat = new SimpleDateFormat("ddMMyyyy-HHmmss"); 
     Date date = new Date(); 
     String CurrentDateTime = dateFormat.format(date); 

     InputStream input = null; 
     OutputStream output = null; 

     try { 
      input = context.getResources().openRawResource(
        context.getResources().getIdentifier(
          "@drawable/" + picName, "drawable", 
          context.getPackageName())); 
      output = new FileOutputStream(direct + "/" + "IMG-" 
        + CurrentDateTime + ".jpg"); 

      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = input.read(buf)) > 0) { 
       output.write(buf, 0, len); 
      } 

      MediaScannerConnection.scanFile(context, 
        new String[] { direct.toString() }, null, 
        new MediaScannerConnection.OnScanCompletedListener() { 
         public void onScanCompleted(String path, Uri uri) { 
          Log.i("ExternalStorage", "Scanned " + path + ":"); 
          Log.i("ExternalStorage", "-> uri=" + uri); 
         } 
        }); 

      Toast.makeText(context, "Image Saved.", Toast.LENGTH_LONG).show(); 
     } catch (Exception e) { 
      Log.e("Internal Image Save Error->", e.toString()); 

      Toast.makeText(context, 
        "Couldn't Save Image.\nError:" + e.toString() + "", 
        Toast.LENGTH_LONG).show(); 
     } finally { 
      try { 
       if (input != null) { 
        input.close(); 
       } 
       if (output != null) { 
        output.close(); 
       } 
      } catch (IOException ignored) { 
       Log.e("Internal Image Save Error->", ignored.toString()); 

       Toast.makeText(
         context, 
         "Couldn't Save Image.\nError:" + ignored.toString() 
           + "", Toast.LENGTH_LONG).show(); 
      } 
     } 
+0

@ZerO,我的文章不是關於如何保存圖像。這是關於畫廊更新。 – CSAT 2014-09-11 06:56:30

+0

是的。現在讀什麼在重複... – PKlumpp 2014-09-11 07:01:16

回答

1

必須播出外​​部目錄...

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

如果您在SD卡創建外部文件夾,然後它不是在GALLARY顯示,然後使用下面的代碼。

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
      Runtime.getRuntime().exec(
        "am broadcast -a android.intent.action.MEDIA_MOUNTED -d file://" 
          + CommonVariable.abc_FOLDER); 
     } else { 
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
        Uri.parse("file://" + CommonVariable.abc_FOLDER))); 
     } 

其他掃描方法。

Uri contentUri = Uri.fromFile(destFile); 
     Intent mediaScanIntent = new Intent(
       Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     mediaScanIntent.setData(contentUri); 
     sendBroadcast(mediaScanIntent); 

我希望它對你有用。

+0

讓我試試這個。但是,如果我從服務器保存圖像,爲什麼它工作正常? – CSAT 2014-09-11 06:58:26

+0

我嘗試了所有的東西,但都沒有工作。 – CSAT 2014-09-11 08:04:53

+0

當你在SD卡中存儲圖像時,這段代碼將寫入.. – dipali 2014-09-11 08:08:34