如何在 Android 服务中启动没有标志 FLAG_ACTIVITY_NEW_TASK 的意图?
How do I start an intent without the flag FLAG_ACTIVITY_NEW_TASK in an Android service?
我正在尝试从自定义软键盘连接到不同的活动。我需要键盘下方的 activity 以允许在不创建自身新实例的情况下发送数据。例如:如果键盘在消息传递应用程序上方,我想发送该应用程序数据而不丢失用户正在输入的当前对话。我目前有以下代码将数据发送到 activity.
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 时,如何防止键盘下方的当前 activity 自行重置?或者更简单地说,如何在不设置 FLAG_ACTIVITY_NEW_TASK 标志的情况下从服务发送意图?
您可以通过多种方式完成此操作,但您必须设置标志才能完成任务。
如果要创建新实例并关闭当前实例需要设置Intent.FLAG_ACTIVITY_CLEAR_TOP
。
如果你想在这种情况下重复使用 activity 的同一个实例,你需要同时设置 Intent.FLAG_ACTIVITY_CLEAR_TOP
和 Intent.FLAG_ACTIVITY_SINGLE_TOP
之后它不会创建另一个 activity 但调用 activity 的 onNewIntent()
到 运行 新 Intent。
你真的不能那样做。 Service
无法将数据传递给没有 "starting it" 的 Activity
。你不想那样做。您想要将数据传递给 "already started" Activity
。有两种方法可以做到这一点:
使用绑定 Service
。将 Activity
绑定到 Service
。然后 Activity
可以调用 Service
上的方法(使用 AIDL)并接收返回的数据。
使用一个BroadcastReceiver
。让 Activity
创建并注册一个 BroadcastReceiver
来监听返回的数据。在你的Service
中,当你想向Activity
发送数据时发送一个广播Intent
。
我正在尝试从自定义软键盘连接到不同的活动。我需要键盘下方的 activity 以允许在不创建自身新实例的情况下发送数据。例如:如果键盘在消息传递应用程序上方,我想发送该应用程序数据而不丢失用户正在输入的当前对话。我目前有以下代码将数据发送到 activity.
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 时,如何防止键盘下方的当前 activity 自行重置?或者更简单地说,如何在不设置 FLAG_ACTIVITY_NEW_TASK 标志的情况下从服务发送意图?
您可以通过多种方式完成此操作,但您必须设置标志才能完成任务。
如果要创建新实例并关闭当前实例需要设置Intent.FLAG_ACTIVITY_CLEAR_TOP
。
如果你想在这种情况下重复使用 activity 的同一个实例,你需要同时设置 Intent.FLAG_ACTIVITY_CLEAR_TOP
和 Intent.FLAG_ACTIVITY_SINGLE_TOP
之后它不会创建另一个 activity 但调用 activity 的 onNewIntent()
到 运行 新 Intent。
你真的不能那样做。 Service
无法将数据传递给没有 "starting it" 的 Activity
。你不想那样做。您想要将数据传递给 "already started" Activity
。有两种方法可以做到这一点:
使用绑定
Service
。将Activity
绑定到Service
。然后Activity
可以调用Service
上的方法(使用 AIDL)并接收返回的数据。使用一个
BroadcastReceiver
。让Activity
创建并注册一个BroadcastReceiver
来监听返回的数据。在你的Service
中,当你想向Activity
发送数据时发送一个广播Intent
。