Bundle.putДополнительная проблема с андроидом

В настоящее время я разрабатываю приложение для Android, в котором я создаю намерение уведомления, которое добавляет параметры в пакет намерения. Когда уведомление нажато, оно вызывает действие и получает данные из пакета. Тем не менее, при первом использовании приложение работает нормально, но когда вы нажимаете на другой элемент, оно должно передавать другие данные в действие уведомления, но по какой-то причине оно не заменяет старые данные новыми.

Я пытался вызвать bundle.removeExtra("companyPassword"), прежде чем использовать putExtra, но, похоже, это не имеет никакого значения. Ниже приведен код уведомления

private void notification(String companyName, String companyURL, String companyUsername, String loginPassword)
{
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns);

    int icon = R.drawable.icon;
    CharSequence tickerText = "Click notification to copy password";
    long when = System.currentTimeMillis();

    Notification notification = new Notification(icon, tickerText, when);

    Context context = getApplicationContext();
    CharSequence contentTitle = "PM - Login Management";
    CharSequence contentText = "Click here to copy password";
    Intent notificationIntent = new Intent(ShowLogins.this, DataManagement.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    notificationIntent.removeExtra("companyName");
    notificationIntent.removeExtra("companyURL");
    notificationIntent.removeExtra("companyUsername");
    notificationIntent.removeExtra("companyPassword");
    notificationIntent.putExtra("companyName", companyName);
    notificationIntent.putExtra("companyURL", companyURL);
    notificationIntent.putExtra("companyUsername", companyUsername);
    notificationIntent.putExtra("companyPassword", loginPassword);

    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

    final int NOTIFICATION_ID = 1;

    notification.defaults |= Notification.DEFAULT_SOUND;
    //notification.defaults |= Notification.DEFAULT_VIBRATE;
    notification.defaults |= Notification.DEFAULT_SOUND;
    notification.defaults |= Notification.FLAG_AUTO_CANCEL;

    mNotificationManager.notify(NOTIFICATION_ID, notification);
    finish();

А ниже приведен код для действия уведомления, где он извлекает данные, которые передаются в пакет.

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            // setContentView(R.layout.data_mangement);

            Bundle bundle = this.getIntent().getExtras();

            company = bundle.getString("companyName");
            companyURL = bundle.getString("companyURL");
            username = bundle.getString("companyUsername");
            password = bundle.getString("companyPassword");
            bundle.clear();

            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            Encryption encryption = new Encryption();
            String decryptedPassword = encryption.decrypt(password);
            clipboard.setText(decryptedPassword);
            toastNotification("Password Successfully Copied\n\nPaste into password field");
            bundle.clear();
            finish();
            moveTaskToBack(true);

        } catch (Exception ex) {
            Log.d("DataManagement Error", ex.toString());
        }
    }

По какой-то причине, когда вызывается действие для уведомления, оно возвращает только данные, которые были впервые отправлены при первом выборе элемента, вместо получения новых данных.

Спасибо за любую помощь, которую вы можете предоставить.


person Boardy    schedule 19.02.2011    source источник
comment
Сразу после еще одной отладки я посмотрел, что на самом деле было внутри пакета, когда Eclipse остановился в точке отладки, и это выглядит так, как будто действие было использовано один раз, когда в следующий раз он не обновляет пакет.   -  person Boardy    schedule 19.02.2011


Ответы (1)


Тем не менее, при первом использовании приложение работает нормально, но когда вы нажимаете на другой элемент, оно должно передавать другие данные в действие уведомления, но по какой-то причине оно не заменяет старые данные новыми.

Это потому, что вы недостаточно меняете свой Intent и не используете FLAG_UPDATE_CURRENT< /a> в вашем PendingIntent. Попробуйте последнее и посмотрите, поможет ли это.

person CommonsWare    schedule 19.02.2011
comment
что вы имеете в виду, недостаточно меняя намерение. Я сделал то, что вы предложили создать PendingIntent, добавив флаг, но, похоже, он ничего не передает, просто придумывая NullPointerException - person Boardy; 19.02.2011
comment
@Boardy: Если вы вызываете getActivity() для PendingIntent для Intent, а затем вызываете getActivity() для PendingIntent для другого эквивалентного Intent (то же самое намерение, данные, категории и компоненты), вы получаете то же самое PendingIntent назад. Без FLAG_UPDATE_CURRENT это означает, что вы получаете дополнительные услуги от первого Intent, а не от второго. Что касается вашего исключения, сначала настройте весь Intent, прежде чем создавать PendingIntent. - person CommonsWare; 19.02.2011
comment
Большое спасибо за вашу помощь, теперь все работает отлично. Еще раз спасибо - person Boardy; 19.02.2011
comment
У этого есть рабочее решение stackoverflow.com/questions/3168484/ установите какое-то фиктивное действие для намерения, иначе дополнительные элементы будут удалены. Например, намерение.setAction(foo) - person Sam; 23.01.2012