在android中设置单个广播的多个警报 [英] Set multiple alarms with single broadcas in android

查看:139
本文介绍了在android中设置单个广播的多个警报的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了这个程序用于设置警报,我希望这个警报在特殊时间内为用户发送通知。我使用AlarmManager和BroadcastReceiver。但它只适用于一个警报,只有SetAlarm(20)工作并发送通知。如何使用多次和多次警报和通知?



这是我的警报方法和我的接收器:



我尝试过:



I write this program for set alarms and I want that this alarms send notification for user in special time.I use AlarmManager and BroadcastReceiver. But it just work for one alarm and just SetAlarm(20) works and send notification. How can I use alarm and notification more than one and for several time?

This is my alarm method And my receiver:

What I have tried:

public class Main3Activity extends AppCompatActivity {


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

        SetAlarm(10);
        SetAlarm(20);


    }


    private void SetAlarm(int sec) {
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, sec);

        long time = cal.getTimeInMillis();

        Intent i = new Intent(Main3Activity.this, MyReceiver.class);

        PendingIntent pi = PendingIntent.getBroadcast(Main3Activity.this, 0, i, 0);

        am.set(AlarmManager.RTC_WAKEUP, time, pi);

    }


}




public class MyReceiver extends BroadcastReceiver {



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

        showNotification(context,Main3Activity.class,"Test Time","do it now");


    }

    public static void showNotification(Context context,Class<?> cls,String title,String content)

    {

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




        Intent notificationIntent = new Intent(context, cls);

        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);




        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);

        stackBuilder.addParentStack(cls);

        stackBuilder.addNextIntent(notificationIntent);




        PendingIntent pendingIntent = stackBuilder.getPendingIntent(

                DAILY_REMINDER_REQUEST_CODE,PendingIntent.FLAG_UPDATE_CURRENT);




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

        Notification notification = builder.setContentTitle(title)

                .setContentText(content).setAutoCancel(true)

                .setSound(alarmSound).setSmallIcon(R.mipmap.ic_launcher_round)

                .setContentIntent(pendingIntent).build();



        NotificationManager notificationManager = (NotificationManager)

                context.getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(DAILY_REMINDER_REQUEST_CODE, notification);

    }

推荐答案

从文档中说出

当你设置了第二个使用相同待处理意图的警报,它取代了原来的警报。



所以你应该在这里使用不同的BroadcastId作为待处理的意图< br $>


From the documentation it says
When you set a second alarm that uses the same pending intent, it replaces the original alarm.

So you shall use different BroadcastIds for the pending intent here

int ticks = (int) System.currentTimeMillis();
PendingIntent pi = PendingIntent.getBroadcast(Main3Activity.this, ticks, i, 0);





希望这有帮助!! !



Hope this helps!!!


PendingIntent pendingIntent = PendingIntent.getBroadcast(Disease_Credentials.this,_id,intent2,PendingIntent.FLAG_ONE_SHOT);



添加


Add

,PendingIntent.FLAG_ONE_SHOT

而不是0


这篇关于在android中设置单个广播的多个警报的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆