在Android服务中,如果不使用flag\u ACTIVITY\u NEW\u任务,如何启动意向?

在Android服务中,如果不使用flag\u ACTIVITY\u NEW\u任务,如何启动意向?,android,android-intent,service,Android,Android Intent,Service,我正在尝试通过自定义软键盘连接到不同的活动。我需要键盘下面的活动,以便在不创建新实例的情况下发送数据。例如:如果键盘位于消息传递应用程序上方,我希望在不丢失用户正在键入的当前对话的情况下发送该应用程序数据。我目前有以下代码向活动发送数据 Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); //sendIntent.pu

我正在尝试通过自定义软键盘连接到不同的活动。我需要键盘下面的活动,以便在不创建新实例的情况下发送数据。例如:如果键盘位于消息传递应用程序上方,我希望在不丢失用户正在键入的当前对话的情况下发送该应用程序数据。我目前有以下代码向活动发送数据

  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?

当从键盘服务发送意图时,如何防止键盘下的当前活动自行重置?或者更简单地说,如何在不设置标志“活动”或“新建任务”标志的情况下从服务发送意图?

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

如果要创建新实例并关闭当前实例,则需要设置
Intent.FLAG\u ACTIVITY\u CLEAR\u TOP


如果您想在这种情况下重用同一个活动实例,则需要同时设置
Intent.FLAG\u activity\u CLEAR\u TOP
Intent.FLAG\u activity\u SINGLE\u TOP
,之后它将不会创建另一个活动实例,而是调用
onNewIntent()运行新意图的活动的

您不能这样做。
服务
无法在未“启动”的情况下将数据传递给
活动
。你不想那样做。您想将数据传递给“已启动”的
活动
。有两种方法可以做到这一点:

  • 使用绑定的
    服务
    。让
    活动
    绑定到
    服务
    活动可以调用
    服务上的方法(使用AIDL)并接收返回的数据

  • 使用
    广播接收器
    。让
    活动
    创建并注册一个
    广播接收器
    ,以监听返回的数据。在
    服务
    中,当您希望将数据传输到
    活动
    时,发送广播
    意图


  • 这在大多数情况下都应该是可行的,但在使用Android服务时似乎有不足之处。这个问题有点含糊,看看修订版吧