我试图让用户在我的应用程序中导出一个excel文件,并让该应用程序自动打开创建的excel文件。使用jxl成功创建并存储了excel文件,但是当我尝试使用Hancom Office编辑器打开它时,除了屏幕变暗之外没有其他反应。这是gif:
我不知道是什么原因造成的,也无法在线找到任何相关信息。
我正在使用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>
据我所知,我没有收到任何错误或警告。感谢您的帮助。
答案 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