Search code examples
androidbroadcastreceiver

getStringExtra() returns null when starting activity from BroadcastReceiver


SOLVED

When trying to start AppCompatActivity from my BroadcastReceiver, passed extra parameter readed in onCreate() is null.Where can be problem?

(Android 5.1.1)

In BroadcastReceiver I'm calling my activity like this:

@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 is opened from notification like this:

. . .
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);
}

In my onCreate I'm just opening fragment:

@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();
    }
}

Solution

  • Intent detailsActivityIntent = new Intent(context, DetailsActivity.class);
    intent.putExtra(DetailsActivity.ARG_ACCOUNT_ID, accountId);
    detailsActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(detailsActivityIntent);
    

    I do not know if you have messed while posting the code or this is it's actual state but you are setting Extra on intent instance but you are starting activity from detailsActivityIntent instance.