【问题标题】:Using Intent.createChooser and getting error: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag使用 Intent.createChooser 并出现错误:从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志
【发布时间】:2020-09-21 18:04:12
【问题描述】:

我想通过服务类中的选项打开共享。 它在 Android 7 中运行良好,但在 8+ 操作系统中开始显示

android.util.AndroidRuntimeException:从 Activity 上下文之外调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?

我也将此标志包含在我的 Intent 中,但它仍然显示相同的错误。

还有其他方法可以通过服务类中的选项打开共享吗?

                    Intent i = new Intent(Intent.ACTION_SEND);
                    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    i.putExtra(Intent.EXTRA_STREAM, rasta);  //rasta -> Uri obj
                    i.setType("image/*");
                    getApplicationContext().startService(Intent.createChooser(i,"Share karna..."));

【问题讨论】:

  • 清理并重建您的项目,如果这无助于尝试将该标志添加到清单中,也许您的两个活动都需要该标志?

标签: java android android-intent android-activity service


【解决方案1】:

Intent.createChooser 创建一个Intent,因此您需要在那个意图上设置FLAG_ACTIVITY_NEW_TASK标志,例如,

                    Intent i = new Intent(Intent.ACTION_SEND);
                    i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    i.putExtra(Intent.EXTRA_STREAM, rasta);  //rasta -> Uri obj
                    i.setType("image/*");
                    Intent chooserIntent = Intent.createChooser(i,"Share karna...");
                    chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    getApplicationContext().startActivity(chooserIntent);

您还调用了 startService 而不是 startActivity - 确保也更正它。

【讨论】:

  • 谢谢先生,它解决了我的问题。我还有一个查询,直到现在我的 webView 工作正常,但现在它显示错误 WARNING: tile memory limits exceeded, some content may not draw 与这个意图有什么关系吗?(因为我在 webView 的下载管理器中使用这个意图)
  • 我很高兴它有帮助!这几乎肯定与这个 Intent 代码无关——它与网页本身的内容相关,而这在它之外。
猜你喜欢
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多