You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio中SqliteToExcel导出XLS文件Windows不显示求助

解决Android导出XLS文件后Windows无法立即显示的问题

我之前也碰到过一模一样的情况!核心问题很简单:你在导出CSV时手动调用了MediaScannerConnection.scanFile()通知系统更新文件索引,但用SqliteToExcel库导出XLS后,没做同样的操作——系统不知道新生成了XLS文件,Windows通过MTP连接自然就看不到它,重启设备其实是触发了系统的全盘扫描,才间接让文件被识别。

直接解决方案:在XLS导出完成后触发媒体扫描

只需要在SQLiteToExcel的导出完成回调里,补上媒体扫描的逻辑就行。修改后的exportExcel()代码如下:

public void exportExcel () {
    File fileDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MultiEntry/Excel");
    final String fileName = TABLE_NAME + "-" + currentDateandTime + ".xls";
    final String fullFilePath = fileDir.toString() + "/" + fileName;
    Log.d(TAG, fullFilePath);

    if (!fileDir.exists()) {
        fileDir.mkdirs();
    }

    try {
        SQLiteToExcel sqliteToExcel = new SQLiteToExcel(context, "MultiEntry.db", fileDir.getPath());
        sqliteToExcel.exportSingleTable(TABLE_NAME, fileName, new SQLiteToExcel.ExportListener() {
            @Override
            public void onStart() {
                // 导出开始的回调(可选操作)
            }

            @Override
            public void onCompleted(String file) {
                // 关键:导出完成后立刻通知系统扫描这个XLS文件
                String[] paths = new String[]{fullFilePath};
                MediaScannerConnection.scanFile(context, paths, null, new MediaScannerConnection.OnScanCompletedListener() {
                    @Override
                    public void onScanCompleted(String path, Uri uri) {
                        Log.d(TAG, "XLS文件已被系统识别:" + path);
                    }
                });
                Toast.makeText(context, "File Excel created successfully", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(Exception e) {
                Log.e(TAG, "XLS导出失败:" + e.getMessage());
            }
        });
    } catch (Exception e) {
        Log.e(TAG, "初始化导出工具出错:" + e.getMessage());
    }
}

额外需要注意的细节

  1. 权限检查:确保你的AndroidManifest.xml里声明了对应权限:

    • Android 10及以下:WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE
    • Android 13及以上:READ_MEDIA_DOCUMENTS(针对文档类文件)
  2. 路径正确性:可以在onCompleted里打印fullFilePath,用手机自带的文件管理器确认该路径下确实生成了XLS文件——如果路径错了,扫描操作也会无效。

  3. Windows MTP缓存:如果偶尔还是出现不显示的情况,试试在Windows端断开再重新连接手机,这是Windows MTP的小缓存bug,和Android端的扫描操作无关。

内容的提问来源于stack exchange,提问作者Alex David Fernndez Gianfriddo

火山引擎 最新活动