如何检测哪个活动导致服务在 Android 中启动?
Posted
技术标签:
【中文标题】如何检测哪个活动导致服务在 Android 中启动?【英文标题】:How to detect which activity caused service to start in Android? 【发布时间】:2020-11-01 18:44:58 【问题描述】:假设我有几个名为 A、B、C 的活动。
从这个活动中,我想启动一个名为 X 的后台服务。
是否可以从服务中检测到启动它的活动的类名是什么?
例如,如果服务由 B 活动启动,我应该得到类似 B 或 B.class
的内容我想知道我是否可以在不硬编码类名的情况下执行此操作,方法是将其作为额外内容放在导致服务启动的意图中(因此,如果我创建更多活动,我不必在其中添加类名每个活动的意图)。
【问题讨论】:
我猜你可以 Actions ,所以为你的活动创建常量,然后在你的意图中检查动作是否等于给定的常量,例如 无法从 android 获取此信息。您需要自己以某种方式将信息添加到Intent
。为什么需要这些信息?
【参考方案1】:
首先在您的 X 类中定义一个 Context 或一个 Activity。
public class X ()
private Activity activity;
public X (Activity activity)
this.activity = activity;
然后在您的 X 类中创建一个方法来获取活动名称
public void GetName()
PackageManager packageManager = activity.getPackageManager();
try
ActivityInfo info = packageManager.getActivityInfo(activity.getComponentName(), 0);
Log.e("called from service", "Activity name:" + info.name);
catch (PackageManager.NameNotFoundException e)
e.printStackTrace();
或
public void GetName()
String name = activity.getClass().getSimpleName();
Log.e("service",name);
然后你可以在你的 B 类中调用这个方法,例如:
X service = new X(B.this);
service.GetName();
【讨论】:
以上是关于如何检测哪个活动导致服务在 Android 中启动?的主要内容,如果未能解决你的问题,请参考以下文章