无法使用Intent.ACTION_VIEW在Android上打开Excel文件

时间:2018-08-05 18:36:57

标签: java android excel android-intent

我试图让用户在我的应用程序中导出一个excel文件,并让该应用程序自动打开创建的excel文件。使用jxl成功创建并存储了excel文件,但是当我尝试使用Hancom Office编辑器打开它时,除了屏幕变暗之外没有其他反应。这是gif:
enter image description here
我不知道是什么原因造成的,也无法在线找到任何相关信息。 我正在使用here接受的答案来支持我的目标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(设置为的子代)中的提供者标签:

<provider
            android:name=".GenericFileProvider"
            android:authorities="com.something.racecalculator.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

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

1 个答案:

答案 0 :(得分:0)

我不确定是什么引起了问题,但是,我怀疑我的文件路径可能错误。我更改了几件事(包括将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或更高版本,则需要实施FileProvider