Intent.getExtras()始终返回null(Intent.getExtras() alwa

2019-08-06 22:31发布

我试图通过通知和事件来运行一个活动onCreate我想“重定向”。 这个在上添加信息的思想Intent类。 一个重要的特征是,产生所述通知的类是通过服务来执行。 我检索从上下文getApplicationContext由类提供的方法android.app.Application 。 每当我调用方法getExtras()将返回null 。 我究竟做错了什么?

public class OXAppUpdateHandler {

    private void addNotification(Context context, int iconID,
           CharSequence tickerText, CharSequence title, CharSequence content) {

        CharSequence notificationTicket = tickerText;
        CharSequence notificationTitle = title;
        CharSequence notificationContent = content;

        long when = System.currentTimeMillis();

        Intent intent = new Intent(context, MainActivity_.class);
        intent.setFlags(
            Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra(OPEN_UPDATE_ACTIVITY_KEY, 1);

        PendingIntent pendingIntent = 
            PendingIntent.getActivity(context, 0, intent, 0);

        NotificationManager notificationManager = 
            (NotificationManager) context.getSystemService(
                Context.NOTIFICATION_SERVICE);
        Notification notification = 
            new Notification(iconID, notificationTicket, when);
        notification.setLatestEventInfo(context, notificationTitle, 
                                        notificationContent, pendingIntent);
        notificationManager.notify(NOTIFICATION_ID, notification);
    }

    public static boolean isUpdateStart(Intent intent) {
        Bundle bundle = intent.getExtras();
        boolean result = bundle != null && 
                         bundle.containsKey(OPEN_UPDATE_ACTIVITY_KEY);
        if (result) {
            bundle.remove(OPEN_UPDATE_ACTIVITY_KEY);
        }
        return result;
        }
    }

    @EActivity(R.layout.activity_main)
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (OXAppUpdateHandler.isUpdateStart(getIntent())) {
                startActivity(new Intent(this, UpdateActivity_.class));
            }
        }
    }

Answer 1:

我打算将身体探出窗口和猜测,你的问题就在这里:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

您传递intent ,以getActivity()并期望你会得到一个PendingIntent符合您的Intent ,包括你的临时演员。 不幸的是,如果已经有一个PendingIntent漂浮在匹配您的系统Intent考虑你的Intent演员)然后getActivity()将返回你PendingIntent来代替。

要查看是否是这个问题,试试这个:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

这是说,如果已经有一个是PendingIntent ,你匹配Intent ,它应该更换的那些群众演员在你的系统中某个地方intent参数。



Answer 2:

(1)检查这里以确保您使用的认沽/正确获得额外因为我没有看到你所添加数据的意图的代码。

(2)它看起来像你不是要求获得意图,获得额外的和,作为一个结果,而不是真正从束得到任何东西(假设信息extists)。 如果您正在检查一个布尔值,你应该让你的包放在如下数据:

Bundle bundle = getIntent().getExtras();

if (bundle.getBooleanExtra("WHATEVER"){
   //whatever you want to do in here
} 


文章来源: Intent.getExtras() always returns null