2017-02-27 3 views
0

私はandroid studioで働いています。私がカメラを使用しているappを構築する。私は私のアプリを実行すると、アプリは正常に動作します。私はイメージをキャプチャしたイメージをキャプチャします。しかし、私が作成したフォルダはギャラリーに表示されていません。私はlocal storageに画像を保存していますが、SD CARDには保存していません。私は非常に興味があったので、フォルダーが作成されないので、私のギャラリーにあるはずですので、私に何のエラーも与えません。だから私は私のデバイスを再起動し、再起動後に私は自分のギャラリー内のフォルダとそれで撮影された画像を見ることができます。私は再びアプリケーションを開いて、そこから画像を撮ったが、画像はフォルダに表示されなかった。以下は私のアプリから写真を撮ると画像ディレクトリが作成されない

は、私は以下

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) 
    { 
     if(resultCode == Activity.RESULT_OK) 
     { 
      Bitmap bmp = (Bitmap)data.getExtras().get("data"); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 

      bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 

      // convert byte array to Bitmap 
      Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 

      if(isStoragePermissionGranted()) 
      { 
       SaveImage(bitmap); 
      } 


     } 

} 
private void SaveImage(Bitmap finalBitmap) { 

    String root = Environment.getExternalStorageDirectory().getAbsolutePath().toString(); 
    Log.v(LOG_TAG, root); 
    File myDir = new File(root + "/captured_images"); 
    myDir.mkdirs(); 
    Random generator = new Random(); 
    int n = 1000; 
    n = generator.nextInt(n); 
    String fname = "Image-" + n + ".jpg"; 
    File file = new File(myDir,fname); 
    if (file.exists())file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out); 
     out.flush(); 
     out.close(); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

画像を保存するために、TAのディレクトリを作っていた中で、私のコードで私のデバッグの絵は注意**

enter image description here

です:**

私はネイティブカメラを使用しているので、画像はカメラのロールフォルダ、つまりデバイスのデフォルトフォルダに保存されます。しかしそこに保存されている画像は圧縮されていないので、圧縮画像は作成したフォルダに保存する必要があります。

私はそれに固執し、何をすべきかわかりません。

ご協力いただければ幸いです。

+0

はsaveImage'メソッド呼び出し、この '' sendBroadcast後(新しいテント( Intent.ACTION_MEDIA_MOUNTED、 Uri.parse( "ファイル://は、" + Environment.getExternalStorageDirectoryは()))); ' – sajan

+0

が試みとなってこのエラー 'java.lang.RuntimeException:結果を返すResultInfo {who = null、request = 1888、result = -1、data =インテント{行=インラインデータ(エクストラ)}}アクティビティ' – faisal1208

+0

** Android 4.4 ** '' sendBroadcast(新しいテント(Intent.ACTION_MEDIA_MOUNTED、Uri.parse( "ファイル://" + Environment.getExternalStorageDirectory())));のAndroid 4.4から '' ** ** ( "/ sdcard//"ファイルは新しいファイルに保存されています。) "" sendBroadcast(新しいインテント(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE、Uri.parse( "file://" Environment.getExternalStorageDirectory())); '' – sajan

答えて

2

を試みるあなたがscanFile(コンテキスト・コンテキスト、文字列[]パス、文字列[] MIMEタイプ、MediaScannerConnection.OnScanCompletedListenerコールバック)MediaScannerConnectionメソッドを呼び出す必要があります。

MediaScannerConnectionは、アプリケーションが新しく作成またはダウンロードしたメディアファイルをメディアスキャナサービスに渡す方法を提供します。これで、新しく保存されたメディアでフォルダが更新されます。

private void SaveImage(Bitmap finalBitmap) { 

     //.... 
     if(!storageDir.exists()){ 
       storageDir.mkdirs(); 
     } 
     //... 
     file.createNewFile(); 
     try { 
      MediaScannerConnection.scanFile(context, new String[] {file.getPath()} , new String[]{"image/*"}, null); 
      FileOutputStream out = new FileOutputStream(file); 
      finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out); 
      out.flush(); 
      out.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
+0

' new String [] {"image/*"}); 'の代わりに' image/* ' ? – faisal1208

+0

MIMEタイプの配列を配置する必要があります。あなたのケースでは、その唯一のイメージメディアがimage/*自身になります。 – CoderP

+0

これを変更する必要はありませんか? – faisal1208

0

この

private void saveBitmap(Bitmap bitmap) { 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = timeStamp + ".jpg"; 
     File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     final String fileLoc = storageDir.getAbsolutePath() + "/folderName/" + imageFileName; 
     File file = new File(fileLoc); 
     OutputStream os = null; 
     try { 
      os = new BufferedOutputStream(new FileOutputStream(file)); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); 
     try {`enter code here` 
      os.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

フォルダ"); if(!folder.exists()) folder.mkdirs(); –

+0

私は 'SD'カードを使用していません私はローカルストレージに画像を保存しています – faisal1208

関連する問題