【发布时间】:2017-02-28 21:32:09
【问题描述】:
我正在编写使用 Android 原生插件的 Unity 移动应用程序。该插件创建后台定位服务,并在用户接近地图上的特定点时通知用户(顺便说一句,这些点是建筑纪念碑)。
所以Service会发送推送通知,当用户点击这个通知时,应用应该从之前暂停的地方打开。
为了创建这个通知,我编写了下面的代码:
Intent intent = new Intent(this, UnityPlayerActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification n = new Notification.Builder(this)
.setContentTitle(title)
.setContentText(text)
.setSmallIcon(R.drawable.app_icon)
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_HIGH)
.setContentIntent(pIntent)
.setAutoCancel(true).build();
mNotificationManager.notify(notificationID, n);
诀窍在于 Unity 在应用生命周期中使用一个 Activity (UnityPlayerActivity)。但是我必须使用我的服务构建独立的 .jar 文件,该文件不能使用 UnityPlayerActivity 类,因为它不知道这一点。
我只能在运行时获取当前的Activity 实例,并在启动服务时使用它。
问题:在创建 Intent 时如何从 Service 中获取 Activity.class?
感谢您的回复。
UPD: 我无法将我的服务放入 Intent 构造函数中。 Intent 构造函数中的第二个参数必须是Activity.Class,当用户单击通知时应该打开它。如果我把Service.Class 放在那里,什么都不会打开。
所以我需要将UnityPlayerActivity 实例作为第二个参数,我只能在运行时获取它,但不知道如何将其导入服务。
【问题讨论】:
-
Service extends Context。为什么需要 Activity? -
所以你有
new Intent(this, this.getClass()); -
@cricket_007 哦,对不起,这是错误的答案。
Intent构造函数中的第二个参数必须是Activity.Class,当用户单击通知时应该打开它。如果我把Service.Class放在那里,什么都不会打开。 -
@cricket_007 所以我需要将
UnityPlayerActivity实例作为第二个参数,我只能在运行时获得,但不知道如何将其导入服务。 -
Class.forName("package.name.UnityPlayerActivity")?
标签: java android android-activity unity3d android-service