从 BroadcastReceiver 启动 activity 时 getStringExtra() returns null

getStringExtra() returns null when starting activity from BroadcastReceiver

已解决

当尝试从我的 BroadcastReceiver 启动 AppCompatActivity 时,在 onCreate() 中读取的额外参数是 null.Where 可能是问题?

(Android 5.1.1)

在 BroadcastReceiver 中,我这样调用 activity:

@Override
public void onReceive(Context context, Intent intent) {
    . . .
    Intent detailsActivityIntent = new Intent(context, DetailsActivity.class);
    intent.putExtra(DetailsActivity.ARG_ACCOUNT_ID, accountId);
    detailsActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(detailsActivityIntent);
}

BroadcastReceiver 从这样的通知中打开:

. . .
notificationBuilder.setContentIntent(
            NotificationActionReceiver.getPendingIntent(account, getApplicationContext()));
. . .

public PendingIntent getPendingIntent(Account account, Context context) {
    Intent intent = new Intent(context, NotificationActionReceiver.class);
    intent.putExtra(DetailsActivity.ARG_ACCOUNT_ID, account.getAccountId());

    return PendingIntent.getBroadcast(context, account.getId().intValue(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
}

在我的 onCreate 中,我只是打开片段:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details);

    String accountId = getIntent().getStringExtra(ARG_ACCOUNT_ID);
    // ** accountId is null **

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.details_container, DetailsFragment.newInstance(accountId))
                .commit();
    }
}
Intent detailsActivityIntent = new Intent(context, DetailsActivity.class);
intent.putExtra(DetailsActivity.ARG_ACCOUNT_ID, accountId);
detailsActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(detailsActivityIntent);

我不知道您在发布代码时是否搞砸了,或者这是它的实际状态,但您在 intent 实例上设置了 Extra,但您正在启动 activity来自 detailsActivityIntent 实例。