2015-11-02 58 views
0

我正在构建一个Android应用程序以在一天中的指定时间显示重复预定通知。Android预定通知不起作用

为此,我已经用下面的代码创建了BroadcastReceiver:

public class ScheduleNotification extends BroadcastReceiver { 


    public static final int NOTIFICATION_ID = 1; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     long when = System.currentTimeMillis(); 

     MainActivity mainActivity = new MainActivity(); 
     String _pasuram_number = mainActivity.get_pasuram_number(); 
     String[] _pasuram_str = mainActivity.get_dd_text(_pasuram_number).split(","); 

     Log.d("VC", "Notification intent paasuram " + _pasuram_number); 
     intent.putExtra("pasuramnumber", _pasuram_number); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     Intent snoozeIntent = new Intent(context, MainActivity.class); 
     PendingIntent piSnooze = PendingIntent.getService(context, 0, snoozeIntent, 0); 

     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 

     builder.setSmallIcon(R.drawable.ic_stat_name); 
     builder.setContentIntent(pendingIntent); 
     builder.setAutoCancel(true); 
    builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_name)); 

     builder.setContentTitle("Title of the notification"); 
     builder.setContentText(_pasuram_str[9]+"-"+_pasuram_str[11]); 


     builder.setStyle(new NotificationCompat.BigTextStyle().bigText(_pasuram_str[0] + "-" + _pasuram_str[8])); 

     Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(NOTIFICATION_ID, builder.build()); 

    } 
} 

在MainActivity中添加代码来创建报警

private void createScheduledNotification(int days) 
    { 
     // Get new calendar object and set the date to now 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     // Add defined amount of days to the date 
     calendar.set(Calendar.HOUR_OF_DAY, 6); 
     calendar.set(Calendar.MINUTE, 0); 
     calendar.set(Calendar.SECOND, 0); 
     //calendar.add(Calendar.HOUR_OF_DAY, days * 24); 

     // Retrieve alarm manager from the system 
     AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(getBaseContext().ALARM_SERVICE); 
     // Every scheduled intent needs a different ID, else it is just executed once 
     int id = (int) System.currentTimeMillis(); 

     // Prepare the intent which should be launched at the date 
     Intent intent = new Intent(this, ScheduleNotification.class); 

     // Prepare the pending intent 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     // Register the alert in the system. You have the option to define if the device has to wake up on the alert or not 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 


     //alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
    } 

代码编译罚款和应用程序运行,但安排的通知不会出现如预期。

在manifest文件中添加的接收器如下:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.vaishnavism.eclass.dinamorudivyaprabandam" > 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <!-- permission required to use Alarm Manager --> 
     <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 

     <!-- Register the Alarm Receiver --> 
     <receiver android:name="com.vaishnavism.eclass.dinamorudivyaprabandam.ScheduleNotification"/> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".SettingsActivity" 
      android:label="@string/title_activity_settings" 
      android:parentActivityName=".MainActivity" > 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.vaishnavism.eclass.dinamorudivyaprabandam.MainActivity" /> 
     </activity> 
    </application> 

</manifest> 

任何有助于解决问题是极大的赞赏。

感谢

+0

什么或你的问题在哪里? – behrooz

+0

调用createScheduledNotification(1);来自MainActivity的onCreate。 –

+0

问题是通知根本没有出现 –

回答

0

尝试使用让你的闹钟象下面这样:

Calendar calendar = Calendar.getInstance(); 
       calendar.setTimeInMillis(System.currentTimeMillis()); 
       calendar.set(Calendar.HOUR_OF_DAY, 6); 
       calendar.set(Calendar.MINUTE, 0); 
       int interval = 1000 * 60 * 60 * 24; 

       Intent myIntent = new Intent(yourActivity.this, ScheduleNotification .class); 
       pendingIntent = PendingIntent.getBroadcast(UserDashBoardActivity.this, 0, myIntent,0); 
       /* Repeating on every 24 hours interval */ 
       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent); 

而且你需要开始报警当设备启动。

欲了解更多信息引用here

希望它能帮助你。

+0

@SureshPB:很高兴为您效劳。 :-) – KishuDroid