Oh, I have found a cause of the problem. It is a logic problem in my code
but it is not displayed above codes.


在 2011年2月7日 下午12:26,San Zhang <[email protected]>写道:

> 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