所以,我确实彻底搜查的答案,我的问题; 通常我可以很容易地找到答案几乎任何东西。
反正基本上我有一个告警管理器设置最终设定的广播接收机。 在接收机内部,它决定意图迄今尚未收到,删除共享的首选项,然后将启动该活动的通知。 问题是,在我的手机用4.0共享首选项没有被成功删除,但以往任何电话时,我已经试过(2.2,2.3),它完美的作品。
我最终找到的Android 3.1的文档和FLAG_INCLUDE_STOPPED_PACKAGES实施。 我试着扔在那的意图,以防万一,但它仍然是行不通的。 无论哪种方式,它不是,这是问题的活动的开展,但简单的删除一个共享的偏好。
我希望这是很清楚! 我会在下面的一些代码。
这就是意图开始:
Calendar cal = Calendar.getInstance();
int seconds = 5 * 60; // 1 * 24 * 60 * 60;
cal.add(Calendar.SECOND, seconds);
Intent intent = new Intent(SetAlertActivity.this, ReminderReceiver.class);
intent.putExtra("id", "FAlert");
//intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), FRAUD_ALERT_CODE, intent, 0);
AlarmManager alertManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alertManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
settingsEditor = alertSettings.edit();
settingsEditor.putLong("AlertTime1", cal.getTimeInMillis());
settingsEditor.commit();
然后,广播接收器的onReceive():
nContext = context;
alertSettings = nContext.getSharedPreferences(MainActivity.PREFERENCE_FILENAME, 0);
if (intent.getStringExtra("id").equals("FAlert"))
{
settingsEditor = alertSettings.edit();
settingsEditor.remove("AlertTime1");
settingsEditor.commit();
String ns = Context.NOTIFICATION_SERVICE;
int icon = R.drawable.ar_icon;
CharSequence tickerText = nContext.getString(R.string.notification_ticker);
CharSequence contentTitle = nContext.getString(R.string.notification_title);
CharSequence contentText = nContext.getString(R.string.notification_text);
long when = System.currentTimeMillis();
NotificationManager mNotificationManager = (NotificationManager) nContext.getSystemService(ns);
Notification notification = new Notification(icon, tickerText, when);
Intent notificationIntent = new Intent(nContext, SetAlertActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(nContext, 135, notificationIntent, 0);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(nContext, contentTitle, contentText, contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, notification);
}
所以,正如我前面提到的,在我的设备上的4.0(我没有任何3.x设备)的
settingsEditor = alertSettings.edit();
settingsEditor.remove("AlertTime1");
settingsEditor.commit();
部分不工作。 该活动将正常打开,但“AlertTime1”仍然存在。 在2.2和2.3的设备的“AlertTime1”被成功删除。
感叹 :d
谢谢你的帮助!!
哦,万一它的需要,这是我的接收器清单:
<receiver
android:name="ReminderReceiver"
android:process=":remote" >
</receiver>
这是区别在哪里显示:
alertSettings = getSharedPreferences(AlertRenewActivity.PREFERENCE_FILENAME, 0);
settingsEditor = alertSettings.edit();
if (alertSettings.contains("AlertTime1"))
{
alertTime = alertSettings.getLong("AlertTime1", 0);
timeLeft = (int) ((alertTime - System.currentTimeMillis()) / (1000L));
daysLeft = timeLeft / (60 * 60 * 24);
daysLeftView.setText(Integer.toString(daysLeft));
setAlert.setEnabled(false);
setAlert.setTextColor(R.color.dark_text);
}
else
{
daysLeftView.setText(R.string.no_alert_set);
}
在我的旧手机,它正确地重置为说:“毫无戒备集”,但是,从4.0的手机仍然显示左“0”的日子(这是它说什么,因为我是唯一的警报设置为5分钟左右进行测试) 。 基本上,用户不能设置一个新的警报,因为它已经无法正常复位,并再次,仅在4.0的手机我想:P