确定 PendingIntent 是否为 Activity

Determine if PendingIntent is an Activity

有没有办法判断 PendingIntentIntentSender 是否会启动 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.