1

我在这里阅读了几个问题,并且也有类似的问题。不幸的是,在另一个问题上的答案能够解决这个问题。我知道如何在按钮上单击创建通知,但我未能在特定时间创建通知。我在下面的代码片段中的目标是每天在19:00创建一个通知。以下是代码片段:在预定义时间发送通知不起作用

MainActivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Calendar calendar = Calendar.getInstance(); 
    setAlarm(calendar); 
} 

public void setAlarm(Calendar calendar) { 

    Intent alertIntent = new Intent(this, Receiver.class); 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, alertIntent, 0); 

    calendar.set(Calendar.HOUR_OF_DAY, 19); 
    calendar.set(Calendar.MINUTE, 00); 

    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
        24*60*60*1000, pendingIntent); 
} 

接收机:

public class Receiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    createNotification(context, "Blabla", "Blablablabla", "Alert"); 

    } 

    public void createNotification(Context context, String msg, 
            String msgText, String msgAlert) { 

    PendingIntent pi = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); 

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.clear_dayicon) 
      .setContentTitle(msg) 
      .setContentText("msgText") 
      .setTicker(msgAlert); 

    mBuilder.setContentIntent(pi); 
    mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND); 
    mBuilder.setAutoCancel(true); 

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, mBuilder.build()); 
    } 
} 

清单:

// only ones I called after started working with notifications and stuff 

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<service android:name=".Receiver2" android:enabled="true"> 
    <intent-filter> <action android:name="NOTIFICATION_SERVICE" /></intent-filter> 
</service> 
<receiver android:name=".Receiver"/> 

有些帮助将是非常赞赏。由于我是初学者,我需要有人向我展示自己的错误。否则,无论我读了多少文档,我都无法发现它们。此代码看起来好像没什么问题:P

回答

-1

试试这个:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, 19); 
    calendar.set(Calendar.MINUTE, 00); 

    setAlarm(calendar); 
} 
public void setAlarm(Calendar calendar) { 
    boolean alarmNoActive = (PendingIntent.getBroadcast(this, 0, new Intent("ALARM"), PendingIntent.FLAG_NO_CREATE) == null); 

    if(alarmNoActive){ 
     Intent itAlarm = new Intent("ALARM"); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,itAlarm,0); 

     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     AlarmManager alarme = (AlarmManager) getSystemService(ALARM_SERVICE); 

     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
       24*60*60*1000, pendingIntent); 
    } 
} 

在清单把这个权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" 

在应用:

<receiver 
     android:name="path of the BroadcastReceiver.Receiver" 
     android:label="BroadcastReceiverAux"> 
     <intent-filter> 
      <action android:name="ALARM" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
+0

.getService()来.getBroadcast()是我猜的问题。感谢您的改进。 –