簡體   English   中英

Intent.getExtras()始終返回null

[英]Intent.getExtras() always returns null

我正在嘗試通過通知和事件onCreate運行一個活動,我想“重定向”。 為此,請在Intent類中添加有關信息的想法。 一個重要的功能是生成通知的類是通過服務執行的。 我從android.app.Application類提供的getApplicationContext方法檢索上下文。 每當我調用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));
            }
        }
    }

我要往窗外傾斜,猜想你的問題在這里:

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

您正在將intent傳遞給getActivity()並期望您將返回一個與您的Intent相匹配並包括其他內容的PendingIntent 不幸的是,如果系統中已經存在一個與您的Intent相匹配的PendingIntent考慮您的Intent額外getActivity() ),那么getActivity()會返回給您該PendingIntent

要查看是否是問題所在,請嘗試以下操作:

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

這就是說,如果系統中某處已經有一個與您的Intent相匹配的PendingIntent ,則應使用intent參數中的多余項替換這些多余項。

(1) 在此處檢查以確保您正確使用了put / get臨時演員,因為我看不到要在其中添加數據的代碼。

(2)看來您不是在打電話獲取意圖和獲得額外的東西,結果實際上並沒有從捆綁中得到任何東西(假設信息存在)。 如果要檢查布爾值,則應按以下方式獲取放置在分發包中的數據:

Bundle bundle = getIntent().getExtras();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM