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 в тосте, полученная от ожидающего намерения, не отображается. Вместо этого отображается пустой тост.
Ответы
Ответ 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
);