确定 PendingIntent 是否为 Activity
Determine if PendingIntent is an Activity
有没有办法判断 PendingIntent
或 IntentSender
是否会启动 activity(而不是广播或服务)?
PendingIntent
有一个 isActivity()
函数,但它被标记为 @hide
。
我已经尝试 copy/paste 来自 here 的代码,但无济于事。
A PendingIntent
只是对实际 Intent
的引用。 PendingIntent
实际上不包含任何数据,因此您无法查看它。实际的Intent
是由Android自己管理的。很遗憾,您无法获得所需的信息。
注意:以上答案不正确。从 Android 4.1 开始,可以确定 PendingIntent
包裹的 Intent
是否会启动 Activity
.
你可以使用反射来完成,像这样:
PendingIntent pendingIntent = ... // This is the `PendingIntent`
try {
Method method = PendingIntent.class.getDeclaredMethod("isActivity");
method.setAccessible(true);
Boolean isActivity = m.invoke(pendingIntent);
if (isActivity) {
// PendingIntent will launch an Activity
}
} catch (Exception e) {
// Problem using reflection
}
在早于 4.1 的 Android 版本上,这将抛出 NoSuchMethodException
.
在 PendingIntent
上调用(私有)方法 isActivity()
生成对 Android ActivityManager
的调用,询问它是否 [=11= 的目标] 是一个 Activity
.
有没有办法判断 PendingIntent
或 IntentSender
是否会启动 activity(而不是广播或服务)?
PendingIntent
有一个 isActivity()
函数,但它被标记为 @hide
。
我已经尝试 copy/paste 来自 here 的代码,但无济于事。
A PendingIntent
只是对实际 Intent
的引用。 PendingIntent
实际上不包含任何数据,因此您无法查看它。实际的Intent
是由Android自己管理的。很遗憾,您无法获得所需的信息。
注意:以上答案不正确。从 Android 4.1 开始,可以确定 PendingIntent
包裹的 Intent
是否会启动 Activity
.
你可以使用反射来完成,像这样:
PendingIntent pendingIntent = ... // This is the `PendingIntent`
try {
Method method = PendingIntent.class.getDeclaredMethod("isActivity");
method.setAccessible(true);
Boolean isActivity = m.invoke(pendingIntent);
if (isActivity) {
// PendingIntent will launch an Activity
}
} catch (Exception e) {
// Problem using reflection
}
在早于 4.1 的 Android 版本上,这将抛出 NoSuchMethodException
.
在 PendingIntent
上调用(私有)方法 isActivity()
生成对 Android ActivityManager
的调用,询问它是否 [=11= 的目标] 是一个 Activity
.