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

Reply via email to