我有一个应用程序可以在给定时间或按设定的时间间隔安排推文。我使用重复的broadcastIntent来发送推文。我为邮件,用户名等添加了额外内容。 我使用用户名+消息的md5sum作为唯一标识符,以便每个intent都是唯一的。该代码适用于一条推文,但是当我添加另一条推文时,新推文包含与第一条相同的附加内容。
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&#34 ;,则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);
}