我有一个应用程序可以在给定时间或设定的时间间隔安排推文。我使用重复的广播意图来发送推文。我包括消息、用户名等的附加内容。我使用用户名+消息的 md5sum 作为唯一标识符,以便每个意图都是唯一的。该代码适用于一条推文,但当我添加另一条推文时,新推文包含与第一条相同的附加内容。
private void setupTimedTweet(int position, Context c, String username,
String message, String day, String mentions, String timeValue){
Bundle b = new Bundle();
b.putString("username", username);
Toast.makeText(c, "New tweet saved, "+ message, Toast.LENGTH_LONG).show();
b.putString("message", message);
b.putString("mentions", mentions);
b.putString("day", day);
Intent myIntent = new Intent(c, TweezeeReceiver.class);
myIntent.putExtras(b);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(c, md5(username+message), myIntent, 0);
AlarmManager alarmManager =
(AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.setTimeZone(TimeZone.getDefault());
calendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt(timeValue.split(":")[0]));
calendar.set(Calendar.MINUTE, Integer.parseInt(timeValue.split(":")[1]));
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent;
}
该方法中的吐司具有正确的信息。设置新警报时,没有问题。然而,接收者永远不会获得新推文的更新附加内容。如果我安排了一条推文“test1”,然后是另一个推文“test2”,则 setupIntervalTweet() 方法具有正确的信息,但是当接收者收到它时,它具有来自“test1”推文的相同信息。
@Override
public void onReceive(Context c, Intent i) {
Log.d("RECERIVER", "TWEET RECIEVED!");
Bundle tweetInfo = i.getExtras();
message = tweetInfo.getString("message");
username = tweetInfo.getString("username");
day = tweetInfo.getString("day");
prefs = PreferenceManager.getDefaultSharedPreferences(c);
ctx = c;
mHandler = new Handler();
sendTweet();
}
为什么我的接收器没有得到正确的附加功能?
完整的源代码可以在这里找到。https://github.com/T3hh4xx0r/TweeZee/
编辑:我已经可以更新推文了,但是我无法让新的附加功能在新推文上工作以保存新的附加功能。我正在使用FLAG_UPDATE_CURRENT
更新我的待处理意图。我听说要使用,FLAG_CANCEL_CURRENT
开始新的,但我不想取消一个,我只想开始一个新的。我找不到新的或类似的标志。
这是更新的代码。
private void setupIntervalTweet(int position, Context c, String username,
String message, String wait, String day,
String mentions, boolean updating, String og) {
Bundle b = new Bundle();
b.putString("username", username);
b.putString("message", message);
b.putString("mentions", mentions);
b.putString("day", day);
Toast.makeText(c, "New tweet saved, "+message, Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(c, TweezeeReceiver.class);
myIntent.putExtras(b);
PendingIntent pendingIntent;
if (updating) {
pendingIntent = PendingIntent.getBroadcast(c, md5(username+og), myIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
} else {
pendingIntent = PendingIntent.getBroadcast(c, md5(username+message),
myIntent, 0);
}
AlarmManager alarmManager =
(AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
Integer.parseInt(wait)*60000, pendingIntent);
}