我正在尝试使用警报管理器在特定时间(每天上午8:00)向用户发送通知.
但我的代码不正确的工作,请帮助我显示通知
我的MainActivity
@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); AlarmController al=new AlarmController(this); al.StartAlarm();}
我的AlarmController
public class AlarmController { private Context m_Context; private AlarmManager mgr; private static final long PERIOD = 1000 * 30; public AlarmController(Context context){ m_Context = context; mgr = (AlarmManager)m_Context.getSystemService(Context.ALARM_SERVICE); } public voID StartAlarm(){ Intent i = new Intent(m_Context, OnAlarmReceiver.class); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY,8); PendingIntent pi=PendingIntent.getbroadcast(m_Context, 0,i, PendingIntent.FLAG_UPDATE_CURRENT); mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi); Log.i("AlarmController", "StartAlarm"); } public voID StopAlarm(){ Intent i = new Intent(m_Context, OnAlarmReceiver.class); PendingIntent pi=PendingIntent.getbroadcast(m_Context, 0,i, PendingIntent.FLAG_UPDATE_CURRENT); mgr.cancel(pi); Log.i("AlarmController", "StopAlarm"); }}
和OnAlarmReceiver
public class OnAlarmReceiver extends broadcastReceiver {@OverrIDepublic voID onReceive(Context context, Intent intent) {context.startService(new Intent(context, AppService.class));
}
}
AppService public int onStartCommand(Intent intent, int flags, int startID) { Log.i(TAG, "start job"); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallicon(R.mipmap.ic_launcher) .setContentTitle("My notification") .setContentText("از اپ سرویس!"); int mNotificationID = 001; notificationmanager mNotifyMgr = (notificationmanager) getSystemService(NOTIFICATION_SERVICE); mNotifyMgr.notify(mNotificationID, mBuilder.build()); Log.i(TAG, "stop job"); return START_STICKY;}
解决方法:
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);alarmIntent = new Intent(context of current file, AlarmReceiver1.class); pendingIntent = PendingIntent.getbroadcast(Menu.this, 0, alarmIntent,PendingIntent.FLAG_UPDATE_CURRENT); alarmIntent.setData((Uri.parse("custom://"+System.currentTimeMillis()))); alarmManager.cancel(pendingIntent); Calendar alarmStartTime = Calendar.getInstance(); Calendar Now = Calendar.getInstance(); alarmStartTime.set(Calendar.HOUR_OF_DAY, 8); alarmStartTime.set(Calendar.MINUTE, 00); alarmStartTime.set(Calendar.SECOND, 0); if (Now.after(alarmStartTime)) { Log.d("hey","Added a day"); alarmStartTime.add(Calendar.DATE, 1); } alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); Log.d("Alarm","Alarms set for everyday 8 am.");
来到广播接收器类.您需要在清单中注册您的广播接收器.这将导致您接收时钟事件.
覆盖此广播接收器的onReceive方法并在其中进行通知或制作单独的通知构建服务,并在那里构建和显示您的通知.
清单代码片段:
<receiver androID:name="AlarmReceiver1" androID:enabled="true">
广播接收器代码段:
public class AlarmReceiver1 extends broadcastReceiver { @OverrIDe public voID onReceive(Context context, Intent intent) { Intent service1 = new Intent(context, NotificationService1.class); service1.setData((Uri.parse("custom://"+System.currentTimeMillis()))); context.startService(service1);}
通知构建服务代码段:
public class NotificationService1 extends IntentService{ private notificationmanager notificationmanager; private PendingIntent pendingIntent; private static int NOTIFICATION_ID = 1; Notification notification;@OverrIDe protected voID onHandleIntent(Intent intent) {ontext context = this.getApplicationContext(); notificationmanager = (notificationmanager)context.getSystemService(Context.NOTIFICATION_SERVICE); Intent mIntent = new Intent(this, Activity to be opened after clicking on the notif); Bundle bundle = new Bundle(); bundle.putString("test", "test"); mIntent.putExtras(bundle); pendingIntent = PendingIntent.getActivity(context, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT); Resources res = this.getResources(); NotificationCompat.Builder builder = new NotificationCompat.Builder(this); Uri soundUri = ringtoneManager.getDefaultUri(ringtoneManager.TYPE_ALARM); notification = new NotificationCompat.Builder(this) .setContentIntent(pendingIntent) .setSmallicon(R.drawable.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.ic_launcher)) .setTicker("ticker value") .setautoCancel(true) .setPriority(8) .setSound(soundUri) .setContentTitle("Notif Title") .setContentText("Text").build(); notification.flags |= Notification.FLAG_auto_CANCEL | Notification.FLAG_SHOW_liGHTS; notification.defaults |= Notification.DEFAulT_SOUND | Notification.DEFAulT_VIBRATE; notification.ledARGB = 0xFFFFA500; notification.ledOnMS = 800; notification.ledOffMS = 1000; notificationmanager = (notificationmanager)getSystemService(NOTIFICATION_SERVICE); notificationmanager.notify(NOTIFICATION_ID, notification); Log.i("notif","Notifications sent."); }}
总结 以上是内存溢出为你收集整理的android – 我希望每天早上8点播出通知全部内容,希望文章能够帮你解决android – 我希望每天早上8点播出通知所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)