2015-10-31 3 views
0

У меня есть намерение, что при завершении сохраняет изображение в/sdcard/Aperture. Пока изображение сохраняет, оно НЕ отображает изображение сразу же после его сохранения. В чем может быть проблема? Я попытался использовать широковещательную рассылку сканирования в своем отчете «Результат активности», но это приводит к сбою и не сканирует изображение.Проверьте SD-карту после сохранения изображения (Android)

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == SETTINGS_REQUEST && resultCode == Activity.RESULT_OK) { 
     MediaFragment content = (MediaFragment) getFragmentManager().findFragmentById(com.marlonjones.aperture.R.id.content_frame); 
     if (content != null) content.reload(); 
     reloadNavDrawerAlbums(); 
    } 
    if (requestCode == NEW_PICTURE) { 
     // return from file upload 
     if (resultCode == Activity.RESULT_OK) { 
      Uri uri = null; 
      if (data != null) { 
       uri = data.getData(); 
      } 
      if (uri == null && mCameraFileName != null) { 
       uri = Uri.fromFile(new File(mCameraFileName)); 
      } 
     } 
    } 
} 

final private int REQUEST_CODE_ASK_PERMISSIONS = 123; 
int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
public void camera(MenuItem menu) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     int hasCameraPermission = checkSelfPermission(Manifest.permission.CAMERA); 
     if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.CAMERA}, 
        REQUEST_CODE_ASK_PERMISSIONS); 
      return; 
     } 
     Intent intent = new Intent(); 
     intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 
     Date date = new Date(); 
     DateFormat df = new SimpleDateFormat("-mm-ss"); 

     String newPicFile = "PH" + df.format(date)+".jpg"; 
     String outPath = "/sdcard/Aperture/" + newPicFile; 
     File outFile = new File(outPath); 
     mCameraFileName = outFile.toString(); 
     Uri outuri = Uri.fromFile(outFile); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outuri); 
     startActivityForResult(intent, NEW_PICTURE); 
    } 
else{ 
     Intent intent = new Intent(); 
     intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 
     Date date = new Date(); 
     DateFormat df = new SimpleDateFormat("-mm-ss"); 

     String newPicFile = "PH" + df.format(date) + ".jpg"; 
     String outPath = "/sdcard/Aperture/" + newPicFile; 
     File outFile = new File(outPath); 
     mCameraFileName = outFile.toString(); 
     Uri outuri = Uri.fromFile(outFile); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outuri); 
     startActivityForResult(intent, NEW_PICTURE);} 
} 
+0

U может проверить есть этот путь –

+0

Я добавил проверку существует, но он все еще не показывал изображение в галерее:/ – MJonesDev

+0

Также пробовал это, что НЕ работало: 'if (data! = Null) { uri = data.getData(); sendBroadcast (новое задание ( ) Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse ("file: //" + Environment.getExternalStorageDirectory()));; ' – MJonesDev

ответ

2

Впечатление использует MediaScannerConnection в некоторых местах, я считаю. Это более современная версия использования намерений сканера. Он также сообщает вам, когда сканирование завершено, и вы получите новый URI (или null, если файл был удален из базы данных мультимедиа).

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

Вы хотите перезагрузить носители и альбомы после завершения сканирования.

+0

Это не помогло:/Вот ошибка: Не удалось декодировать поток: java.io.FileNotFoundException: /storage/emulated/0/Aperture/PH-35-52.jpg: open failed: ENOENT (Нет такого файла или каталог) – MJonesDev

+0

Код: если (ResultCode == Activity.RESULT_OK) { MediaScannerConnection.scanFile (это, новый String [] { "/ SDCard/Aperture"}, нулевой новый MediaScannerConnection.OnScanCompletedListener() { @Override public void onScanCompleted (String path, Uri uri) { Log.i («ExternalStorage», «Scanned» + path + «:»); Log.i («ExternalStorage», «-> uri =» + uri); } }); – MJonesDev

+0

@VirusThePanda, вы можете попробовать передать URI файла, а не только путь. Как Uri.fromFile (файл) .toString() – afollestad