getExtra от Намерения, запущенного от pendingIntent

Я пытаюсь сделать некоторые предупреждения после того, как пользователь выбирает что-то со временем из списка, и создайте уведомление для него в данное время. Моя проблема состоит в том что "showname" что putExtra на моем Поглощенном наклоне быть полученной в бытовом радиоприемнике. Это всегда получает нулевое значение. Это - способ, которым я делаю это для большинства своих намерений, но я думаю на этот раз, возможно, из-за pendingIntent или broadcastReceiver, что-то должно быть сделано differentelly.Спасибо

Функция, которая отправляет Намерение через незаконченное намерение

public void setAlarm(String showname,String time) {

    String[] hourminute=time.split(":");
    String hour = hourminute[0];
    String minute = hourminute[1];
    Calendar rightNow = Calendar.getInstance();
    rightNow.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
    rightNow.set(Calendar.MINUTE, Integer.parseInt(minute));
    rightNow.set(Calendar.SECOND, 0);
    long t=rightNow.getTimeInMillis();
    long t1=System.currentTimeMillis();

    try {   

    Intent intent = new Intent(this, alarmreceiver.class);  
    Bundle c = new Bundle();            
    c.putString("showname", showname);//This is the value I want to pass
    intent.putExtras(c);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 12345, intent, 0);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, rightNow.getTimeInMillis(),pendingIntent);
    //Log.e("ALARM", "time of millis: "+System.currentTimeMillis());
    Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();

    } catch (Exception e) {
        Log.e("ALARM", "ERROR IN CODE:"+e.toString());
    }
}

И это - принимающий конец

public class alarmreceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    // Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();      
    Bundle b = intent.getExtras();
    String showname=b.getString("showname");//This is where I suppose to receive it but its null
    NotificationManager manger = (NotificationManager) context
            .getSystemService(context.NOTIFICATION_SERVICE);

    Notification notification = new Notification(R.drawable.icon,
            "TVGuide Υπενθύμιση", System.currentTimeMillis());
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            new Intent(context, tvguide.class), 0);

    notification.setLatestEventInfo(context, "Το Πρόγραμμα Ξεκίνησε",
            showname, contentIntent);

    notification.flags = Notification.FLAG_ONLY_ALERT_ONCE;

    notification.sound = Uri.parse("file:///sdcard/dominating.mp3");
    notification.vibrate = new long[]{100, 250, 100, 500};
    manger.notify(1, notification);
}           
}
38
задан Justin Johnson 21 May 2010 в 19:18
поделиться

1 ответ

Намерения повторно используются в системе, если, как мне кажется, они не отличаются по контексту / действию. Ссылка на документацию . То есть, если вы уже создали намерение, это намерение можно использовать и позже.

В качестве отладочного теста вы можете попробовать добавить intent.setAction ("" + Math.random ()) ниже intent.putExtras (c) и посмотреть, есть ли у вас экстры принимаются на другом конце.

Соответствующая документация :

Из-за такого поведения важно знать, когда два намерения считаются одинаковыми для целей получения PendingIntent. Распространенной ошибкой, которую допускают люди, является создание нескольких объектов PendingIntent с намерениями, которые различаются только своим «дополнительным» содержимым, ожидая каждый раз получать другой PendingIntent. Так не бывает. Для сопоставления используются те же части Intent, которые определены в Intent.filterEquals. Если вы используете два объекта Intent, эквивалентных Intent.filterEquals, то вы получите одно и то же PendingIntent для них обоих.

24
ответ дан 27 November 2019 в 03:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: