簡體   English   中英

BroadcastReceiver 的 onReceive 中的 Intent extras 為空

[英]Intent extras are empty in onReceive of BroadcastReceiver

我想BroadcastReceiver 類的onReceive()方法中的Intent 獲取一些參數 但是只有 int ALARM_COUNT = 1,雖然我放了兩個參數:我的 Parcelable Alarm 對象和 test int(對於警報對象有問題的情況)。

我這樣設置鬧鍾:

private void setCurrentAlarm(Alarm alarm) {
        long time = System.currentTimeMillis() + getClosestTimeDifference(alarm);

        mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, createPendingIntent(alarm));
    }

我是如何創建 PendingIntent 變量的:

private PendingIntent createPendingIntent(@NonNull Alarm alarm) {
        Intent intent = new Intent(mContext, AlarmBroadcastReceiver.class);

        intent.putExtra(KEY_ALARM, alarm);
        intent.putExtra("TEST", 1010120012);

        return PendingIntent.getBroadcast(mContext, alarm.getId(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
    }

我的 AlarmBroadcaseReceiver 類中的 onReceive() 方法:

    @Override
    public void onReceive(Context context, Intent intent) {
           Alarm receivedAlarm = intent.getParcelableExtra(KEY_ALARM); //is always null
           int receivedInt = intent.getIntExtra("TEST", -1); //the same empty, -1
    }

如您所見,Intent 僅包含一些額外的 ALARM_COUNT,但沒有我的額外內容。

怎么辦? 我怎樣才能得到它們?

嗨,丹尼斯,您可以像字符串一樣發送值,然后解析為 int。

private PendingIntent createPendingIntent(@NonNull Alarm alarm) {
    Intent intent = new Intent(mContext, AlarmBroadcastReceiver.class);

    intent.putExtra(KEY_ALARM, alarm);
    intent.putExtra("TEST", "1010120012");

    return PendingIntent.getBroadcast(mContext, alarm.getId(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
}

@Override
public void onReceive(Context context, Intent intent) {
       Alarm receivedAlarm = intent.getParcelableExtra(KEY_ALARM); //is always null
       Bundle extras = intent.getExtras();
       String testString = (String) extras.get("TEST");
       int test = Integer.parseInt(testString)
}

你將在你的方法 onReceive 中擁有“TEST”的價值

使用下面示例中所示的標志對我很有幫助。

retrun PendingIntent.getBroadcast(mContext, alarm.getId(), intent, PendingIntent.FLAG_CANCEL_CURRENT)
retrun PendingIntent.getBroadcast(mContext, alarm.getId(), intent, PendingIntent.FLAG_IMMUTABLE)
retrun PendingIntent.getBroadcast(mContext, alarm.getId(), intent, PendingIntent.FLAG_ONE_SHOT)
retrun PendingIntent.getBroadcast(mContext, alarm.getId(), intent, PendingIntent.FLAG_UPDATE_CURRENT)

暫無
暫無

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

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