我创建了一个Android应用程序并使用以下方法保存文件:
File created = new File(dir, time.format("%Y%m%d%H%M%S") + "." + suffix);
但是,即使设备连接到我的计算机,保存的文件也只会在重新启动设备后出现在指定的目录中。如何在不重新启动的情况下强制显示文件?
答案 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
}
}