Подтвердить что ты не робот

Intent.putExtra() в ожидании намерения не работает

Я передаю ожидающее намерение через alarmreceiver из класса обслуживания. Но после того, как пожар будет запущен, информация о намерении .putExtra() не будет приниматься классом broadcastreceiver. Вот мой код для запуска pendingIntent

Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, aint, PendingIntent.FLAG_UPDATE_CURRENT);
aint.putExtra("msg", msg);
aint.putExtra("phone", phone);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

Класс приемника аварийного сигнала ниже

public String msg, phonen;

@Override
public void  onReceive(Context context, Intent intent){
    Bundle extras = intent.getExtras();
    msg = extras.getString("msg");
    phonen = extras.getString("phone");

    Log.d("onReceive", "About to execute MyTask");
    Toast.makeText(context,msg, Toast.LENGTH_LONG).show();
}

Информация msg в тосте, полученная от ожидающего намерения, не отображается. Вместо этого отображается пустой тост.

4b9b3361

Ответ 1

Попробуйте это

Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class);
aint.putExtra("msg", msg);
aint.putExtra("phone", phone);



PendingIntent pendingIntent = PendingIntent.getBroadcast(
    getApplicationContext(),
    id, 
    aint,
    // as stated in the comments, this flag is important!
    PendingIntent.FLAG_UPDATE_CURRENT);

Ответ 2

Вы должны использовать getStringExtra() и убедитесь, что строка не равна null:

     Intent intent = getIntent();    
     msg = intent.getStringExtra("msg");
     phonen = intent.getStringExtra("phone");

     if(msg!=null){
      Toast.makeText(context,msg,
        Toast.LENGTH_LONG).show();
     }

и отмените свои putExtras перед PendingIntent:

   Intent aint = new Intent(getApplicationContext(), AlarmReceiver.class);
   aint.putExtra("msg", msg);
   aint.putExtra("phone", phone);
   PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, aint, PendingIntent.FLAG_UPDATE_CURRENT);

Ответ 3

Это потому, что вы сначала инициализируете намерение и добавляете в PendingIntent. После этого вы добавляете информацию о намерениях. Вы должны добавить информацию в намерение, а затем добавить это намерение в PendingIntent.

Ответ 4

Не забудьте указать уникальный идентификатор в конструкторе PendingIntent, или вы можете получить какую-то странную вещь, когда пытаетесь получить значения putExtra.

    PendingIntent pendingIntent = PendingIntent.getBroadcast(
           getApplicationContext(), 
           UUID.randomUUID().hashCode(), 
           aint, 
           PendingIntent.FLAG_UPDATE_CURRENT
    );