【问题标题】:Check SD Card after Saving Image (Android)保存图像后检查 SD 卡 (Android)
【发布时间】:2015-10-31 01:26:11
【问题描述】:

我打算在完成后将图像保存到 /sdcard/Aperture。虽然图像确实保存,但它不会在保存后立即显示图像。可能是什么问题呢?我尝试在我的活动结果中使用扫描广播,但这会导致崩溃,并且不会扫描图像。

@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);}
}

【问题讨论】:

  • 你可以检查这个路径是否存在
  • 我添加了一个检查存在,但它仍然没有在图库中显示图像:/
  • 也试过这个,但没有用:'if (data != null) { uri = data.getData(); sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory())));'

标签: java android android-intent camera android-camera


【解决方案1】:

我相信在某些地方,Impression 使用了 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);
      }
});

您希望在扫描完成后重新加载媒体和相册。

【讨论】:

  • 这不起作用:/这是错误:无法解码流:java.io.FileNotFoundException:/storage/emulated/0/Aperture/PH-35-52.jpg:打开失败: ENOENT(没有这样的文件或目录)
  • 代码:if (resultCode == Activity.RESULT_OK) { MediaScannerConnection.scanFile(this, new String[] { "/sdcard/Aperture" }, null, new MediaScannerConnection.OnScanCompletedListener() { @Override public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned" + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } } );
  • @VirusThePanda 您可能想尝试传递文件 URI 而不仅仅是路径。像 Uri.fromFile(file).toString()
  • 确保 Aperture 目录也始终存在。
  • 我会试试这个。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多