我正在制作一个Android应用程序插件。我试图让它尽可能通用,这对我来说是个问题。我正在设计插件,以便我制作的任何未来的应用程序都可以轻松实现插件。我遇到的问题是插件包含定期通过通知提醒用户的服务。当用户打开通知栏并触摸通知时,它需要打开最初启动该服务的活动。
使用以下代码启动服务:
startService(new Intent(this, myService.class));
服务使用以下代码启动通知:
Intent notificationIntent = new Intent(this, myClass.class);
目前,myClass.class
已硬编码到通知中。这意味着无论我制作多少个不同的应用程序,如果我使用此插件,我必须始终将启动服务的类命名为“myClass”。
我想要一种通用的方法来获得启动服务的原始活动。
答案 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
}