【发布时间】:2013-11-21 16:56:48
【问题描述】:
在我的应用程序中,我有 TextField 和按钮。单击时,Service 启动并从 TextField 读取值并触发 AlarmManager。几秒钟后服务启动BroadcastReceiver 和BrodcastReceiver 启动第二个Activity。
Activity 通知服务并发送值。我可以在Service 中看到具有正确编号的Toast。但在 Second Activity 中,我只看到第一次输入的值。
例如:我写了 5,它计数到 5,然后启动 BroadcatsReceiver,在 Activity 中我可以看到 5。但是如果我现在输入 3,它会计数到 3,但在第二个活动中显示 5(示例下图)。 Next:我把 8 数到 8,先正确显示 Toast。在Second活动中仍然: 5.即使我将再次在手机上上传程序。查看正确值的唯一方法是删除应用程序并再次启动它。我该如何解决?
MainActivity 中的方法:
public void ClickStart(View view) {
Intent i = new Intent(this, MyService.class);
EditText numerField = (EditText) findViewById(R.id.numerField);
String message = numerField.getText().toString();
i.putExtra("EXTRA_MESSAGE", message);
this.startService(i);
}
我的服务:
public class MyService extends Service {
@Override
public void onStart(Intent intent, int startId) {
int countTime = 10;
String data = (String) intent.getExtras().get("EXTRA_MESSAGE");
countTime = Integer.parseInt(data);
Intent i = new Intent(this, MyReciver.class);
i.putExtra("EXTRA_MESSAGE", data);
Log.d("dddService", data); // Correct data
Toast tosty = Toast.makeText(this, data + " sec", Toast.LENGTH_SHORT);
tosty.show();
PendingIntent pintent = PendingIntent.getBroadcast(
this.getApplicationContext(), 1, i, 0);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ (countTime * 1000), pintent);
}
我的接收者:
public void onReceive(Context arg0, Intent arg1) {
String data = (String) arg1.getExtras().get("EXTRA_MESSAGE");
Log.d("ddd", data); //wrrong data
Intent i = new Intent(arg0, MyActivity.class);
i.putExtras(arg1.getExtras());
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
arg0.startActivity(i);
}
我的活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String message = getIntent().getStringExtra("EXTRA_MESSAGE");
Toast.makeText(getApplicationContext(), message + " Activity", Toast.LENGTH_SHORT)
.show();
}
【问题讨论】:
-
你是想实现一个计数器,还是?我怀疑你做的事情比需要的复杂,所以想知道你的代码的目标。
-
这是实验室练习。使用输入字段和按钮创建活动 A 按下按钮时,活动 A 应该启动服务。服务使用 AlarmManager 设置警报。必须在活动 A 的输入字段中指定的秒数后触发警报。触发警报时,必须通知广播接收器。 BroadcastReceiver收到通知后,必须启动Activity B。
标签: android data-binding service broadcastreceiver