android alarm 本地通知
时间: 2023-10-18 13:24:39 浏览: 40
Android的AlarmManager可以用于在指定时间触发应用程序中的操作,其中包括本地通知。下面是一个简单的示例代码,可以在指定时间触发通知。
首先,在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
```
然后,在应用程序代码中,创建一个PendingIntent对象,它将被发送到AlarmManager以触发通知。在PendingIntent对象中,设置通知的标题,内容和其他属性。以下是示例代码:
```java
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("My Notification Title")
.setContentText("My Notification Content")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(notificationId, builder.build());
```
接下来,使用AlarmManager设置一个定时器,以便在指定的时间触发通知:
```java
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, MyAlarmReceiver.class);
intent.putExtra("notificationId", notificationId);
intent.putExtra("message", message);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTimeInMillis, pendingIntent);
```
最后,创建一个BroadcastReceiver类来接收AlarmManager发送的广播,并在接收到广播时触发通知:
```java
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int notificationId = intent.getIntExtra("notificationId", 0);
String message = intent.getStringExtra("message");
Intent intent1 = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("My Notification Title")
.setContentText(message)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.notify(notificationId, builder.build());
}
}
```
这样,当AlarmManager触发广播时,MyAlarmReceiver类将接收到广播并触发通知。