自定义相机照片未显示在Windows资源管理器中

时间:2015-10-06 14:25:22

标签: android camera android-camera picturecallback

我已经按照Android网站上有关如何创建自定义相机应用程序的说明进行操作,到目前为止我已经制作了它。我创建了一个带有图片按钮的布局,它工作正常,图像使用Camera.PictureCallback保存在SD卡上。

问题是,当我用电缆将手机连接到PC时,如果我浏览到从应用程序保存图像的目录,即使我刷新目录,它们也不会显示。如果我在应用程序中使用它们的东西,它工作正常,这意味着它们保存在目录中,路径是正确的。我也可以在手机上使用File Explorer看到它们。

但是,如果我使用Windows Explorer,则在一段时间过后,它们根本不会显示。

这是正常还是我在这里遗漏了什么?

手机(三星Galaxy S6)作为媒体设备(MTP)连接到PC,但我也尝试将其连接为相机(PTP),它也是一样。

这是我用来保存图片的示例代码:

private Camera.PictureCallback mPicture = new Camera.PictureCallback() {

    String timeStamp = new SimpleDateFormat("yyyyMMdd HHmmss").format(new Date());
    String imageFileName = "MyTestPhoto_" + timeStamp;

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        File mediaStorageDir = new File(SAVE_IMAGE_PATH);

        if (!mediaStorageDir.exists())
            mediaStorageDir.mkdir();

            File pictureFile = new File(mediaStorageDir + imageFileName + ".jpg");
            if (pictureFile == null){
                Log.d("PictureCallback", "Error creating media file, check storage permissions.");
                return;
            }

            try{
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();
            }catch (FileNotFoundException e){
                Log.d("PictureCallback ", "File not found: " + e.getMessage());
            }catch (IOException ex){
                Log.d("PictureCallback ", "Error accessing file: " + ex.getMessage());
            }

            photoButton.setClickable(true);
            camera.startPreview();
        }
 };

根据我在互联网上发现的情况,这可能有所帮助:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse(mediaStorageDir + imageFileName + ".jpg")));

但它没有,事实上应用程序现在崩溃了:

  

活动com.example.testApplicationCamera.CameraActivity已泄露   IntentReceiver com.example.testApplicationCamera.CameraActivity$1@28968130   最初在这里注册。你错过了一个电话吗?   unregisterReceiver()?

Android 4.4 KitKat及更高版本似乎不支持此功能。 我并不认为我确实需要它,因为我并不想让它在画廊或任何东西中显现,它实际上工作得很好,只是出于好奇,为什么它不出现在Windows资源管理器中?

1 个答案:

答案 0 :(得分:3)

  

根据我在互联网上发现的情况,这可能有所帮助:

这从来都不是一个合适的解决方案,幸运的是现在已被阻止。

使用ModeratorRequest及其静态MediaScannerConnection方法提醒scanFile()索引文件。

  

为什么它不出现在Windows资源管理器中?

Windows通过媒体传输协议(MTP)连接到Android设备。 Android通过MTP连接提供的服务不是文件系统中的内容,而是由MediaStore索引的内容。