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

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

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

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

例如,如果服务由 B 活动启动,我应该得到类似 BB.class

的内容

我想知道我是否可以在不硬编码类名的情况下执行此操作,方法是将其作为额外内容放在导致服务启动的意图中(因此,如果我创建更多活动,我不必在其中添加类名每个活动的意图)。

【问题讨论】:

  • 我猜你可以 Actions ,所以为你的活动创建常量,然后在你的意图中检查动作是否等于给定的常量,例如
  • 无法从 Android 获取此信息。您需要自己以某种方式将信息添加到Intent。为什么需要这些信息?

标签: android android-activity android-service


【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多