如何在Android服务中没有标志FLAG_ACTIVITY_NEW_TASK的情况下启动意图?

时间:2015-01-29 19:40:23

标签: android android-intent service

我正在尝试从自定义软键盘连接到不同的活动。我需要键盘下方的活动,以允许发送数据,而无需活动创建自己的新实例。例如:如果键盘在消息传递应用程序上,我想发送该应用程序数据而不会丢失用户正在键入的当前对话。我目前有以下代码将数据发送到活动。

  Intent sendIntent = new Intent(Intent.ACTION_SEND); 
  sendIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
  //sendIntent.putExtra("thread_id", (long) 1);
  sendIntent.setType("image/*"); 
  startActivity(sendIntent);

当我尝试运行它时,我收到以下明显错误...

E/AndroidRuntime(6129): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

当从键盘服务发送意图时,如何保持键盘下方的当前活动不会重置?或者更简单地说,如何在不设置FLAG_ACTIVITY_NEW_TASK标志的情况下从服务发送意图?

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式执行此操作,但必须设置标记才能完成任务。

如果要创建新实例并关闭当前实例,则需要设置Intent.FLAG_ACTIVITY_CLEAR_TOP

如果您想在这种情况下重复使用相同的活动实例,则需要同时设置Intent.FLAG_ACTIVITY_CLEAR_TOPIntent.FLAG_ACTIVITY_SINGLE_TOP它不会创建活动的另一个实例,而是调用{{1}运行新Intent的活动。

答案 1 :(得分:0)

你真的不能那样做。如果没有“启动”,Service无法将数据传递给Activity。你不想那样做。您想将数据传递给“已经开始”Activity。有两种方法可以做到这一点:

  1. 使用绑定的Service。让Activity绑定到Service。然后,Activity可以调用Service上的方法(使用AIDL)并接收返回的数据。

  2. 使用BroadcastReceiver。让Activity创建并注册BroadcastReceiver以监听返回的数据。在Service中,如果要将数据传输到Intent,请发送广播Activity