如何在不重启的情况下自动将保存的文件添加到目录 - Android应用程序

时间:2014-04-20 19:10:45

标签: android restart file-manager application-restart

我创建了一个Android应用程序并使用以下方法保存文件:

File created = new File(dir, time.format("%Y%m%d%H%M%S") + "." + suffix);

但是,即使设备连接到我的计算机,保存的文件也只会在重新启动设备后出现在指定的目录中。如何在不重新启动的情况下强制显示文件?

2 个答案:

答案 0 :(得分:1)

假设dir在某个地方的外部存储空间中出现,“仅显示”表示“仅在我使用USB电缆将设备连接到我的开发机器时出现”,use MediaScannerConnection and scanFile() to update the MediaStore index

请注意,如果开发计算机的操作系统(例如Windows)缓存MTP结果,您可能还需要在开发计算机上执行某种刷新操作。

答案 1 :(得分:1)

使用媒体扫描仪。请注意mime类型,您可能需要根据您正在创建的文件进行更改

MediaScannerConnection.scanFile(this.getApplicationContext(), new String[] { filename }, new String[] { "image/jpeg" }, new OnScanCompletedListener()
{
    @Override
    public void onScanCompleted(final String path, final Uri uri)
    {
        // Eureka, your file has been scanned!
    }
});

以下是一些广播新文件的方法:

更新:

void alternativeScan(final String filename)
{
    final File file = new File(filename);
    final Uri fileUri = Uri.fromFile(file);

    // New way

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    {
        this.getApplicationContext().sendBroadcast(new Intent("android.hardware.action.NEW_PICTURE", fileUri));
    }

    // Keep compatibility

    this.getApplicationContext().sendBroadcast(new Intent("com.android.camera.NEW_PICTURE", fileUri));

    // Usual way

    final Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    intent.setData(fileUri);
    this.getApplicationContext().sendBroadcast(intent);
}

如果仍然无效,请使用下一个功能检查媒体存储状态

public static int getMediaStorageState()
{
    final String state = Environment.getExternalStorageState();

    if (Environment.MEDIA_MOUNTED.equals(state))
    {
        return 0; // All Ok, supported Read & Write
    }
    else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
    {
        return 1; // Media storage has Read Only state
    }
    else
    {
        return 2; // Something's wrong. No Read/Write access
    }
}