2015-09-04 123 views
1

我有一个简单的应用程序,其中一项活动应该在特定时间每天显示通知。 这些都是我的课:AlarmManager警报每30分钟而不是每天警报

onAlarmReceiver

public class OnAlarmReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     context.startService(new Intent(context, AppService.class)); 
    } 
} 

onBootReceiver

public class OnBootReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     AlarmController alarm = new AlarmController(context); 
     alarm.StartAlarm(); 
    } 
} 

AppService服务,使通知

public class AppService extends Service { 
    private static String TAG = "AppService"; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 


    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.i(TAG, "start job"); 
     ConnectivityManager cm = (ConnectivityManager) 
     getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 
     if (ni == null) { 
      // There are no active networks. 
     } else{ 
      Uri uri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_launcher) // notification icon 
      .setContentTitle("اtitle") // title for notification 
      .setContentText("content") // message for notification 
      .setAutoCancel(true) 
      .setSound(uri); // clear notification after click 

     Intent intentt = new Intent(this, MainActivity.class); 
     PendingIntent pi = PendingIntent.getActivity(this,0,intentt,Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     mBuilder.setContentIntent(pi); 
     NotificationManager mNotificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(0, mBuilder.build()); 
    } 
    // 
    Log.i(TAG, "stop job"); 
    return START_STICKY; 
    } 
} 

AlarmController类,包括我的alarmmanager

public class AlarmController { 

    private Context m_Context; 
    private AlarmManager mgr; 
    private PendingIntent pi; 

    public AlarmController(Context context) { 
     m_Context = context; 
    } 

    public void StartAlarm() { 

     mgr = (AlarmManager)m_Context.getSystemService(Context.ALARM_SERVICE); 

     Intent i = new Intent(m_Context, OnAlarmReceiver.class); 

     pi=PendingIntent.getBroadcast(m_Context,0 ,i, PendingIntent.FLAG_UPDATE_CURRENT); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.HOUR_OF_DAY, 17); 
     calendar.set(Calendar.MINUTE, 40); 
     Log.i("AlarmController", "StartAlarm"); 
     mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
      AlarmManager.INTERVAL_DAY, pi); 
    }  
} 

,我在MainActivity

AlarmController alarm = new AlarmController(this); 
     alarm.StartAlarm(); 

的onCreate方法写这甚至把这个代码的方法,只是在第一次应用程序将安装运行。 但它仍然会显示通知几乎每30分钟而不是每天。

我该怎么办?我的代码有什么问题? 谢谢!

+0

你想报警,因为该应用程序每24小时推出,或者你想在一天的同一时间得到它 - 17:40每天? – TDG

+0

在同一时间 - 17:40! –

回答

0

类AlarmController必须扩展BroadcastReceiver的

+0

我的onAlarmReceiver类扩展了BroadcastReceiver,我在那里调用了Alarmmanager。但现在我改变了返回START_STICKY; 返回START_NOT_STICKY;在我的服务,并没有得到任何通知超过1小时!希望到第二天才能得到! –