首页 > 代码库 > PendingIntent.getActivity()启动不起来Activity的解决办法

PendingIntent.getActivity()启动不起来Activity的解决办法

今天遇到一个奇怪的bug,PendingIntent.getActivity()在小米手机上面不起作用,在别的手机没有问题,估计是小米侵犯了rom的原因。源代码这个方法介绍如下:

   /**
     * Retrieve a PendingIntent that will start a new activity, like calling
     * {@link Context#startActivity(Intent) Context.startActivity(Intent)}.
     * Note that the activity will be started outside of the context of an
     * existing activity, so you must use the {@link Intent#FLAG_ACTIVITY_NEW_TASK
     * Intent.FLAG_ACTIVITY_NEW_TASK} launch flag in the Intent.
     *
     * @param context The Context in which this PendingIntent should start
     * the activity.
<span style="color:#ff0000;">     * @param requestCode Private request code for the sender (currently
     * not used).</span>
     * @param intent Intent of the activity to be launched.
     * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE},
     * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT},
     * or any of the flags as supported by
     * {@link Intent#fillIn Intent.fillIn()} to control which unspecified parts
     * of the intent that can be supplied when the actual send happens.
     *
     * @return Returns an existing or new PendingIntent matching the given
     * parameters.  May return null only if {@link #FLAG_NO_CREATE} has been
     * supplied.
     */
    public static PendingIntent getActivity(Context context, int requestCode,
            Intent intent, int flags) {
        String packageName = context.getPackageName();
        String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
                context.getContentResolver()) : null;
        try {
            intent.setAllowFds(false);
            IIntentSender target =
                ActivityManagerNative.getDefault().getIntentSender(
                    IActivityManager.INTENT_SENDER_ACTIVITY, packageName,
                    null, null, requestCode, new Intent[] { intent },
                    resolvedType != null ? new String[] { resolvedType } : null, flags);
            return target != null ? new PendingIntent(target) : null;
        } catch (RemoteException e) {
        }
        return null;
    }

标红的部分说现在这个参数不用了,但是不知这个参数究竟有什么作用(有时间了要看一下)

解决办法就是给requestCode一个随机数,示例代码如下:

	Notification notif = new Notification();
		notif.contentIntent = PendingIntent.getActivity(this.context, (new Random().nextInt(100)),
				this.intent, PendingIntent.FLAG_UPDATE_CURRENT);
如上,bug可解,原因不详,了解的大神告诉一下吧。

PendingIntent.getActivity()启动不起来Activity的解决办法