Below codes is notifications behavior no problem:
=================================================
public class AlarmService extends Service
{
@Override
public void onCreate()
{
.
.
.
showNotification(sAlarmKeyName);
Intent i = new Intent(this, AlarmWindow.class);
i.putExtra("AlarmKeyName", sAlarmKeyName);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(i);
.
.
.
}
private void showNotification(String AlarmKeyName)
{
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
CharSequence text = AlarmKeyName;
Notification notification = new Notification(R.drawable.alarmclock,
text, System.currentTimeMillis());
Intent i = new Intent("a.b.c.ALARM", Uri.parse(AlarmKeyName+1), this,
AlarmWindow.class);
Bundle bundle = new Bundle();
bundle.putString("AlarmKeyName", AlarmKeyName);
bundle.putInt("AlarmState", 1);
i.putExtras(bundle);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, i,
0);
notification.setLatestEventInfo(this, getString(R.string.alarm),
settings.getString(AlarmKeyName, " "), contentIntent);
mNM.notify(Integer.parseInt(AlarmKeyName.substring(5)),
notification);
}
}
public class AlarmWindow extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
.
.
.
Button DismissBtn = (Button)findViewById(R.id.dismiss_btn);
DismissBtn.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
.
.
.
NotificationManager mNM =
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mNM.cancel(Integer.parseInt(sAlarmKeyName.substring(5)));
finish();
}
});
}
}
=================================================
Below codes is notifications behavior having problem:
=================================================
public class AlarmService extends Service
{
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
String AlarmKeyName = intent.getStringExtra("AlarmKeyName");
String actionName = intent.getAction();
if(actionName!=null)
{
if(actionName.equals(CS_ALARM_START))
AlarmStart(AlarmKeyName);
if(actionName.equals(CS_ALARM_STOP))
AlarmStop(AlarmKeyName);
.
.
.
}
return START_STICKY;
}
private void AlarmStop(String AlarmKeyName)
{
.
.
.
NotificationManager mNM =
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mNM.cancel(Integer.parseInt(AlarmKeyName.substring(5)));
}
private void AlarmStart(String AlarmKeyName)
{
.
.
.
showNotification(AlarmKeyName, CS_ALARM_START);
IntentAlarmWindow(CS_ALARM_START, AlarmKeyName);
.
.
.
}
private void IntentAlarmWindow(String action, String AlarmKeyName)
{
Intent intent = new Intent(action, Uri.parse(action), mContext,
AlarmWindow.class);
intent.putExtra("AlarmKeyName", AlarmKeyName);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
private void showNotification(String AlarmKeyName, String action)
{
NotificationManager mNM1;
mNM1 = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
CharSequence text = AlarmKeyName;
Notification notification = new Notification(R.drawable.alarmclock,
text, System.currentTimeMillis());
String AlarmTitle = settings.getString(AlarmKeyName, " ");
String sNotiText = AlarmTitle;
PendingIntent contentIntent=null;
Class<?> cls = AlarmService.class;
if(action.equals(CS_ALARM_START))
cls = AlarmWindow.class;
Intent i = new Intent(action+AlarmKeyName,
Uri.parse(action+AlarmKeyName), this, cls);
i.putExtra("AlarmKeyName", AlarmKeyName);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MILLISECOND, SNOOZE_TIME);
if(action.equals(CS_ALARM_START))
{
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
//FLAG_ACTIVITY_NO_HISTORY
Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
contentIntent = PendingIntent.getActivity(this, 0, i, 0);
sNotiText = AlarmTitle;
}
else
{
.
.
.
}
notification.setLatestEventInfo(this, getString(R.string.alarm),
sNotiText, contentIntent);
mNM1.notify(Integer.parseInt(AlarmKeyName.substring(5)),
notification);
}
}
public class AlarmWindow extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String action = intent.getAction();
setContentView(R.layout.alarm_window);
Button DismissBtn = (Button)findViewById(R.id.dismiss_btn);
sAlarmKeyName = intent.getStringExtra("AlarmKeyName");
.
.
.
DismissBtn.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
Context context = getApplicationContext();
Intent i = new Intent(AlarmService.CS_ALARM_STOP,
Uri.parse(AlarmService.CS_ALARM_STOP), context, AlarmService.class );
i.putExtra("AlarmKeyName", sAlarmKeyName);
context.startService(i);
finish();
}
});
.
.
.
}
protected void onNewIntent(Intent intent)
{
setIntent(intent);
String action = intent.getAction();
.
.
.
if(action.contains(AlarmService.CS_ALARM_START))
{
sAlarmKeyName = intent.getStringExtra("AlarmKeyName");
TextView AlsrmTitle = (TextView)findViewById(R.id.alarmtitle);
AlsrmTitle.setText(settings.getString(sAlarmKeyName,
sAlarmKeyName));
}
.
.
.
}
}
=================================================
在 2011年2月7日 上午10:16,San Zhang <[email protected]>写道:
> I don't understand how to use AlarmManager to post notifications. I think
> that all notifications is managered by NotificationManager but not
> AlarmManager, although they are started and canceled according with alarms
> life cycle.
>
> In fact, The behavior of notifications were right, no the problem, before I
> changed some thing in my code. If need, I can write these difference code
> snippet to here.
>
>
> 2011/2/7 TreKing <[email protected]>
>
> On Sun, Feb 6, 2011 at 7:21 AM, San Zhang <[email protected]> wrote:
>>
>>> The results are same: The notification can be deleted from status bar,
>>> but it would be displayed twice (and only twice) when another alarm
>>> notification (with different value of noti_id) be displayed. I
>>> don't understand what is happened. I have searched internet by google but
>>> not answer for this.
>>
>>
>> Are you using AlarmManager to post these notifications? Is so, have you
>> set a repeating alarm? Is so, are you canceling your alarm registered with
>> AlarmManager when the notification is canceled?
>>
>>
>> -------------------------------------------------------------------------------------------------
>> TreKing <http://sites.google.com/site/rezmobileapps/treking> - Chicago
>> transit tracking app for Android-powered devices
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>
>
>
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en