Строка не устанавливается из AlarmReceiver - PullRequest
0 голосов
/ 16 марта 2011

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

Вот первый код, который показывает интерфейс, который будет отображать строку:

public class ShowAlm extends Activity {
private static String MessStr="ZZZ";

    public static void setMessStr(String messStr) {
    MessStr = messStr;
}

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.showalm);


        Toast.makeText(this,"Message " + MessStr, Toast.LENGTH_SHORT).show();


    }

Затем, чтобы протестировать его без Будильника, я помещаю кнопку в другой класс для вызова выше, и все работает как положено:

btnplot.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
               ShowAlm.setMessStr("AAA");



                Intent intent1 = new Intent(context, ShowAlm.class);
                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK  | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                context.startActivity(intent1);

            //TestAlarm();
            //Intent intent = new Intent(v.getContext(), AutoComplete4.class);
            //  startActivity(intent);

        }
    });

Вот в чем проблема, тот же код, что и у кнопки выше, но в приемнике не работает. Строка не установлена.

public class AlarmReceiver extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
  try {
        Bundle bundle = intent.getExtras();
        String message = bundle.getString("alarm_message");

        System.out.println("Message = " + message);

        ShowAlm.setMessStr("AAA");



        Intent intent1 = new Intent(context, ShowAlm.class);
        intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK  | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent1);

   } catch (Exception e) {

   }
}

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

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

Идеи

1 Ответ

1 голос
/ 16 марта 2011

Я предполагаю, что проблема в том, что это статическая переменная. Когда Receiver запускает новое действие, он может снова загружать класс, и статическая переменная будет инициализирована как «ZZZ». Правильный способ сделать это состоит в том, чтобы поместить строку в дополнительные функции.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showalm);
    Intent i = getIntent();
    MessStr = i.getStringExtra("alarmMessage", null);
    if(MessStr != null) {
        Toast.makeText(this,"Message " + MessStr, Toast.LENGTH_SHORT).show();
    }
}

public void onReceive(Context context, Intent intent) {
  try {
        Intent intent1 = new Intent(context, ShowAlm.class);
        intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK  | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent1.putExtra("alarmMessage", "AAA");
        context.startActivity(intent1);
   } catch (Exception e) {
   }
}
...