【问题标题】:2 Calendar show 1 Notification2 日历显示 1 通知
【发布时间】:2016-04-13 19:22:30
【问题描述】:

我有一个应用程序正在用时间表提醒用户

我在新班级中放置了一个带有通知的日历,然后转到主要活动并调用它。

但是第一种方法只显示了通知,而第二种方法没有显示为什么????????

MainActivity.java

        package com.osman.calendar;

    import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.pushbots.push.Pushbots;

    public class MainActivity extends AppCompatActivity {


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

            new section(this,1, 18, 30,"Title","new message","new message");
            new section(this,2, 18, 37,"Title","get new","get new");

        }
    }

section.java

package com.osman.calendar;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;

import java.util.Calendar;

public class section {

    public section(Context context,int id,int Hours,int Minute, String Tilte , String Text, String Alert){
        AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmReceiver.class);
        intent.putExtra("id",id);
        intent.putExtra("Title",Tilte);
        intent.putExtra("Text",Text);
        intent.putExtra("Alert",Alert);
        PendingIntent alarmIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, 0);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, Hours);
        calendar.set(Calendar.MINUTE, Minute);

        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                1000 * 60 * 60 * 24 * 7, alarmIntent);


    }
}

AlarmReceiver.java

        package com.osman.calendar;

    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Vibrator;
    import android.support.v4.app.NotificationCompat;
    import android.widget.Toast;


    public class AlarmReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "Time is up!!!!.",Toast.LENGTH_LONG).show();
            String Title = intent.getExtras().getString("Title");
            String Text = intent.getExtras().getString("Text");
            String Alert = intent.getExtras().getString("Alert");
            int id = intent.getExtras().getInt("id");
            createNotification(context, Title, Text, Alert,id);
            // Vibrate the mobile phone
            Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(2000);
        }

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

            PendingIntent  notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle(msg)
                    .setContentText(msgText)
                    .setTicker(msgAlert);
            mBuilder.setContentIntent(notificIntent);
            mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
            mBuilder.setAutoCancel(true);
            NotificationManager mNotificationMAnger =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            mNotificationMAnger.notify(id, mBuilder.build());
        }

    }

【问题讨论】:

    标签: android android-studio calendar alarmmanager alarm


    【解决方案1】:

    如果您使用与以前相同的 PendingIntent 安排闹钟,则您之前设置的闹钟会更新,而不是设置新闹钟。只有一个警报触发,因为您的 PendingIntent 在您第二次使用时没有改变,只有额外的改变(根据this question's answer这不被视为改变)。

    要不更新旧警报而是设置新警报,您必须使用不同的请求代码(getBroadcast() 中的第二个参数 - 目前您对两个警报都使用 0)。 只需使用您已经拥有的 id 作为部分构造函数中的参数作为请求代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 2020-11-17
      • 2018-01-05
      相关资源
      最近更新 更多