字符串未从AlarmReceiver设置

时间:2011-03-16 16:50:19

标签: android parameter-passing

我有一个警报设置,该部分有效。收到警报后,我将字符串设置为随警报一起保存的消息。但是当我在UI上显示这个字符串时,它没有设置。

以下是显示将显示字符串的UI的第一个代码:

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”编码为字符串,但这并没有帮助。

所以最终结果是日志显示字符串在那里,但是当显示UI时,字符串是默认的。

想法?

1 个答案:

答案 0 :(得分:1)

我认为问题在于它是一个静态变量。当Receiver启动新活动时,它可能再次加载类,静态var将初始化为“ZZZ”。正确的方法是将String放入Intent Extras。

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) {
   }
}