2013-04-26 61 views
1

我有一个应用程序,我希望每天早晨8:30在用户中向用户显示通知。一切工作正常。除了一件事。 每次打开应用程序时都会显示通知。我搜索了很多这个bug,但我不能纠正这个bug ..每次我打开我的应用程序时都会显示通知

这是我的应用程序的启动类。

public class xyz extends Activity { 




/** Called when the activity is first created. */ 

@SuppressWarnings("deprecation") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 




    Intent myIntent = new Intent(xyz.this , NotificationService.class);  
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    PendingIntent pendingIntent = PendingIntent.getService(xyz.this, 0, myIntent, 0); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, 8); 
    calendar.set(Calendar.MINUTE, 30); 
    calendar.set(Calendar.SECOND, 00); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000 , pendingIntent); 


     final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); 

     if (activeNetwork != null && activeNetwork.isConnected()) { 
      //notify user you are online 
      Thread Timer = new Thread(){    
        public void run() 
        { 
         try{     

          sleep(3000); 

         }catch(Exception e){ 

        e.printStackTrace(); 

        } 

        finally{ 


        Intent openScreen = new Intent(xyz.this , Selection_Page.class); 

        startActivity(openScreen); 

      }  

        }  

        }; 

         Timer.start(); 
     } 
     else { // something in else} }} 

,这是我通知服务类。

public class NotificationService extends Service { 

private NotificationManager mManager; 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    //super.onStart(intent, startId); 
    // Getting Notification Service 
    mManager = (NotificationManager) this.getApplicationContext() 
      .getSystemService(
        this.getApplicationContext().NOTIFICATION_SERVICE); 
    /* 
    * When the user taps the notification we have to show the Home Screen 
    * of our App, this job can be done with the help of the following 
    * Intent. 
    */ 
    Uri NOtification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), NOtification); 
    r.play(); 


    Intent intent1 = new Intent(this.getApplicationContext(), Selection_Page.class); 

    Notification notification = new Notification(R.drawable.brand_icon, 
      "See my app for you", System.currentTimeMillis()); 

    intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP 
      | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(
      this.getApplicationContext(), 0, intent1, 
      PendingIntent.FLAG_UPDATE_CURRENT); 

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    notification.setLatestEventInfo(this.getApplicationContext(), 
      "aaa", "See my app for you", 
      pendingNotificationIntent); 

    mManager.notify(0, notification); 
} 

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
}} 

请告诉我,我错过了东西..

在此先感谢..

+0

我想在你的服务,你应该检查,看看时间是8:30 – JRowan 2013-04-26 05:04:41

+0

它的存在。还有就是在这个没有错误。该通知显示在8:30 ..但它也只要我打开我的应用程序 – 2013-04-26 05:09:06

+0

就会显示我认为你直接打电话给你的启动器活动。尝试检查是否条件时间如果时间是准确的然后打电话给你的通知服务 – 2013-04-26 05:10:05

回答

0

有一件事我注意到,您设置8:30今天警告这是在过去,因为你不会改变日历的日常价值。所以请尝试将日期值更改为today + 1,然后重试。以下是更新后的代码与在day值变化:

Intent myIntent = new Intent(xyz.this , NotificationService.class);  
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    PendingIntent pendingIntent = PendingIntent.getService(xyz.this, 0, myIntent, 0); 
    Calendar calendar = Calendar.getInstance(); 
    calender.setTime(System.currentTimeMillis()); 
    calendar.set(Calendar.DAY_OF_MONTH, calender.get(Calender.DAY_OF_MONTH)+1); 
    calendar.set(Calendar.HOUR_OF_DAY, 8); 
    calendar.set(Calendar.MINUTE, 30); 
    calendar.set(Calendar.SECOND, 00); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000 , pendingIntent); 

请测试它让我知道它是如何工作...

+0

新的PendingIntent()这样就不会触发警报 – silverFoxA 2015-06-06 18:28:57

0

你需要在这里介绍一个检查点。只需将系统时间与要触发的通知时间进行比较,如果系统时间大于通知时间,则不执行任何操作。否则会通知。

修改您的代码如下。它会工作。

Intent myIntent = new Intent(xyz.this , NotificationService.class);  
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
PendingIntent pendingIntent = PendingIntent.getService(xyz.this, 0, myIntent, 0); 
long systemTime = System.currentTimeMillis(); 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 8); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 00); 
if(systemTime <= calendar.getTimeInMillis()) { 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000 , pendingIntent); 
} 
else{ 
//do nothing 
} 
相关问题