Xamarin.Android使用Intent打开文件后按返回键直接回到自身应用咨询
问题成因
- 你当前使用了
ActivityFlags.NewTask标识,所有被启动的第三方查看应用Activity会被归入同一个新创建的独立任务栈,栈内会按启动顺序依次留存图片查看、表格查看等页面,按返回键就会按栈顺序依次回退,而非直接回到你的应用 ActivityFlags.NoHistory仅对当前你所启动的目标Activity生效,不会影响同一任务栈内其他已经存在的第三方应用Activity,因此无法清除之前打开的图片查看页面
解决方案
方案1(优先推荐,适配所有系统版本)
不要使用ApplicationContext启动Intent,改用你当前前台Activity的Context启动,同时移除ActivityFlags.NewTask、ActivityFlags.NoHistory标识,启动后第三方应用的Activity会直接叠加在你应用的任务栈顶部,按返回键会直接销毁该页面回到你的应用。
修正后代码示例:
Android.Net.Uri fileUri = FileProvider.GetUriForFile( this, // 替换为当前Activity实例作为Context "com.app.fileprovider", file ); Intent intent = new Intent(Intent.ActionView); // 显式指定MIME类型,提升系统应用匹配准确率 intent.SetDataAndType(fileUri, ContentResolver.GetType(fileUri)); intent.AddFlags(ActivityFlags.GrantReadUriPermission); StartActivity(intent); return true;
方案2(必须使用ApplicationContext启动的场景)
如果业务逻辑必须使用ApplicationContext启动,替换原有的Flags组合,适配Android 5.0及以上系统即可实现每个打开的文件放在独立任务栈中,返回时直接销毁当前栈回到你的应用:
Android.Net.Uri fileUri = FileProvider.GetUriForFile( Android.App.Application.Context, "com.app.fileprovider", file ); Intent intent = new Intent(Intent.ActionView); intent.SetDataAndType(fileUri, ContentResolver.GetType(fileUri)); intent.AddFlags(ActivityFlags.GrantReadUriPermission); intent.AddFlags(ActivityFlags.NewTask); intent.AddFlags(ActivityFlags.NewDocument); intent.AddFlags(ActivityFlags.ClearTask); Android.App.Application.Context.StartActivity(intent); return true;
内容的提问来源于stack exchange,提问作者Maxime BOUILLON
相关产品推荐
相关产品推荐

