Java 无法使用Intent.ACTION\u视图在Android上打开excel文件

Java 无法使用Intent.ACTION\u视图在Android上打开excel文件,java,android,excel,android-intent,Java,Android,Excel,Android Intent,我正在尝试让用户在我的应用程序中导出excel文件,并让应用程序自动打开创建的excel文件。excel文件是使用jxl成功创建和存储的,但是当我尝试使用Hancom Office编辑器打开它时,除了屏幕显示一个黑色覆盖层外,什么都没有发生。这是一张gif: 我不知道这是什么原因,也无法在网上找到任何相关信息。 我正在使用来自的已接受答案来支持我的目标SDK 28 我的导出方法: public void onExport(View view){ try {

我正在尝试让用户在我的应用程序中导出excel文件,并让应用程序自动打开创建的excel文件。excel文件是使用jxl成功创建和存储的,但是当我尝试使用Hancom Office编辑器打开它时,除了屏幕显示一个黑色覆盖层外,什么都没有发生。这是一张gif:

我不知道这是什么原因,也无法在网上找到任何相关信息。 我正在使用来自的已接受答案来支持我的目标SDK 28

我的导出方法:

 public void onExport(View view){
        try {
            //write changes to excel file(changes made outide of function)
            workbook.write();
            workbook.close();
            Toast.makeText(getApplication(),
                    "Data Exported to Excel Sheet", Toast.LENGTH_SHORT).show();
            findViewById(R.id.btn_export).setEnabled(false);

            //set file to saved excel file
            File file = new File(Environment.getExternalStorageDirectory(),
                    race.getName()+".xls");
            Uri path = FileProvider.getUriForFile(getApplicationContext(), "com.something.racecalculator.fileprovider", file);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            Log.i("path: ", path.toString());
            intent.setDataAndType(path, "image/jpg");
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        }
        catch (ActivityNotFoundException e) {
            Log.i("oh no:", "No application available to view excel");
        }
 }
AndroidManifest.xml中的My provider标记(设置为的子项):



据我所知,我没有收到任何错误或警告。谢谢您的帮助。

我不确定问题的确切原因,但是,我怀疑我可能是文件路径错误。我更改了一些内容(包括excel文件的保存位置。从
/storage/emulated/0/
更改为
/storage/emulated/0/Samsung
),以下是有效的方法:

Intent intent = new Intent(Intent.ACTION_VIEW);
File file = new File("/storage/emulated/0/Samsung"+File.separator + race.getName()+".xls");
Uri path = FileProvider.getUriForFile(getApplicationContext(), "com.something.racecalculator.fileprovider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(path, "application/vnd.ms-excel");
startActivity(intent);

请记住,如果您的目标SDK为24或更高,则需要实现一个。我不确定问题的确切原因,但是,我怀疑文件路径可能有误。我更改了一些内容(包括excel文件的保存位置。从
/storage/emulated/0/
更改为
/storage/emulated/0/Samsung
),以下是有效的方法:

Intent intent = new Intent(Intent.ACTION_VIEW);
File file = new File("/storage/emulated/0/Samsung"+File.separator + race.getName()+".xls");
Uri path = FileProvider.getUriForFile(getApplicationContext(), "com.something.racecalculator.fileprovider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(path, "application/vnd.ms-excel");
startActivity(intent);

请记住,如果目标SDK为24或更高,则需要实现一个

为什么要设置setDataAndType image/jpg?它应该是application/vnd.ms-excel@AhsanMalik天哪,我真不敢相信我没看到!我之前使用它来查看是否可以打开图像,以确定是否只是excel文件无法打开。这很可能是整个问题的症结所在。不管怎样,我最终修复了它,现在在我发布的答案中它是正确的。冷静亲爱的快乐为什么设置setDataAndType image/jpg?它应该是application/vnd.ms-excel@AhsanMalik天哪,我真不敢相信我没看到!我之前使用它来查看是否可以打开图像,以确定是否只是excel文件无法打开。这很可能是整个问题的症结所在。无论如何,我最终修正了它,现在我发布的答案是正确的