我正在尝试从自定义软键盘连接到不同的活动。我需要键盘下方的活动,以允许发送数据,而无需活动创建自己的新实例。例如:如果键盘在消息传递应用程序上,我想发送该应用程序数据而不会丢失用户正在键入的当前对话。我目前有以下代码将数据发送到活动。
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标志的情况下从服务发送意图?
答案 0 :(得分:0)
您可以通过多种方式执行此操作,但必须设置标记才能完成任务。
如果要创建新实例并关闭当前实例,则需要设置Intent.FLAG_ACTIVITY_CLEAR_TOP
。
如果您想在这种情况下重复使用相同的活动实例,则需要同时设置Intent.FLAG_ACTIVITY_CLEAR_TOP
和Intent.FLAG_ACTIVITY_SINGLE_TOP
它不会创建活动的另一个实例,而是调用{{1}运行新Intent的活动。
答案 1 :(得分:0)
你真的不能那样做。如果没有“启动”,Service
无法将数据传递给Activity
。你不想那样做。您想将数据传递给“已经开始”Activity
。有两种方法可以做到这一点:
使用绑定的Service
。让Activity
绑定到Service
。然后,Activity
可以调用Service
上的方法(使用AIDL)并接收返回的数据。
使用BroadcastReceiver
。让Activity
创建并注册BroadcastReceiver
以监听返回的数据。在Service
中,如果要将数据传输到Intent
,请发送广播Activity
。