如何确定哪个活动启动了服务?

时间:2012-03-22 14:35:09

标签: android android-intent android-service

我正在制作一个Android应用程序插件。我试图让它尽可能通用,这对我来说是个问题。我正在设计插件,以便我制作的任何未来的应用程序都可以轻松实现插件。我遇到的问题是插件包含定期通过通知提醒用户的服务。当用户打开通知栏并触摸通知时,它需要打开最初启动该服务的活动。

使用以下代码启动服务:

    startService(new Intent(this, myService.class));

服务使用以下代码启动通知:

    Intent notificationIntent = new Intent(this, myClass.class);

目前,myClass.class已硬编码到通知中。这意味着无论我制作多少个不同的应用程序,如果我使用此插件,我必须始终将启动服务的类命名为“myClass”。

我想要一种通用的方法来获得启动服务的原始活动。

4 个答案:

答案 0 :(得分:3)

  

我想要一种通用的方法来获得启动服务的原始活动。

将您想要的信息放在与Intent一起使用的Intent的{​​{1}}个附加内容中。服务无法确定启动它的活动,很大程度上是因为服务不必由活动启动...

答案 1 :(得分:2)

好的,我想通了。我不确定这是否有点“hackish”但在发布原始问题之前我不知道的是你可以创建一个通用的intent,然后使用包的类和路径的字符串设置类信息。这是我使用的代码的副本。

在启动服务的活动中,在实际启动服务之前:

    serviceIntent.putExtra("PackagePath",this.getPackageName());
    serviceIntent.putExtra("ClassPath", this.getPackageName() + "." + this.getLocalClassName());

在服务onStart事件中:

    packagePath = intent.getExtras().getString("PackagePath");
    classPath = intent.getExtras().getString("ClassPath");

最后在服务中设置通知时:

   Intent notificationIntent = new Intent();
   notificationIntent.setClassName(packagePath, classPath);

两个字符串变量中包含的内容示例:

    packagePath = "myApp.main"
    classPath = "myApp.main.mainActivity"

特别感谢CommonsWare指出我使用Parceables的路径,因为搜索如何通过意图传递Parceable的示例带我到

答案 2 :(得分:0)

也许您可以使用其中一种putExtra()方法?

答案 3 :(得分:0)

试试这段代码,

if(this instanceof Activity1) {
    //is Acitivty 1
}
else if (this instanceof Acitivity2){
    //is Activity2
}