如何检测哪个活动导致服务在 Android 中启动?

Posted

技术标签:

【中文标题】如何检测哪个活动导致服务在 Android 中启动?【英文标题】:How to detect which activity caused service to start in Android? 【发布时间】:2020-11-01 18:44:58 【问题描述】:

假设我有几个名为 ABC 的活动。

从这个活动中,我想启动一个名为 X 的后台服务。

是否可以从服务中检测到启动它的活动的类名是什么?

例如,如果服务由 B 活动启动,我应该得到类似 BB.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 中启动?的主要内容,如果未能解决你的问题,请参考以下文章

Android确定单击哪个按钮以启动活动

如何检测Android中的用户不活动

在android中检测主页按钮按下

如何确定哪个应用程序导致“检测到屏幕覆盖”错误?

如何在android Q os中从后台服务启动活动,而不从开发人员选项的设置中单击“允许后台活动启动”?

如何检测哪个 div 在更改时处于活动状态?