java - AlarmManager 和接收器的多重通知 Android Studio Java

标签 java android android-studio notifications

我设置了两个不同的闹钟,应该发出 2 个通知

8:34:0 pm 创建带有标题和消息的通知 1..

8:34:10 pm 创建带有标题和消息的通知 2...

问题是他们都在晚上 8:34:00 一起出现 (在第一个闹钟时间(两者))!!!

我做了什么:-

1-我用通知管理器创建了一个广播类来构建通知

2-主 Activity 创建了alarmManager和日历实例来设置闹钟时间。

    public class MainActivity extends AppCompatActivity {


        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    // Creating alarm method(requestcode,hours,min,seconds)
            setAlarmo(1,20,34,0);
            setAlarmo(2,20,34,10);

        }

    // the Alarm Method
        public void setAlarmo(int reqcode, int hour,int minute,int second){


            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY,hour);
            calendar.set(Calendar.MINUTE,minute);
            calendar.set(Calendar.SECOND,second);

            long timeinMillis = calendar.getTimeInMillis();

            Intent intent = new Intent(getApplicationContext(),AlertRec.class);
            intent.putExtra("reqcode",reqcode);

PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),reqcode,intent,PendingIntent.FLAG_ONE_SHOT);

            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
            alarmManager.set(alarmManager.RTC_WAKEUP,timeinMillis,pendingIntent);

        }

    }

@

// AlertClass receiver extending broadcastReceiver
    public class AlertRec extends BroadcastReceiver {

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

// Creating receiveAlarm method(requestCode,Context,intent,title,text for notification)

//receiving first Alarm from MainActivity.Class 
         recAlarmo(1, context,intent,"title 1","im msg 1");


//receiving Second Alarm from MainActivity.Class     
         recAlarmo(2,context,intent,"title 2","im msg 2");
    }


    // receiving Alarms Method and Creating Notifications

    public void recAlarmo(int reqcode , Context context,Intent intent,String title,String msg){


     intent = new Intent(context,MainActivity.class);

     NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
     PendingIntent pendingIntent = PendingIntent.getActivity(context.getApplicationContext(),reqcode,intent,PendingIntent.FLAG_ONE_SHOT);
     builder.setContentTitle(title);
     builder.setSmallIcon(android.R.drawable.star_on);
     builder.setContentText(msg);
     builder.setAutoCancel(true);
     builder.setContentIntent(pendingIntent);
     builder.setDefaults(NotificationCompat.DEFAULT_SOUND);

     NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

     nm.notify(reqcode,builder.build());

    }
    }

@

    <uses-permission android:name="android.permission.SET_ALARM"></uses-permission>


        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <receiver android:name=".AlertRec"></receiver>
        </application>

最佳答案

    i solved it !
    ------------------------------

    in MainActivity 

    1-create a method that takes int number
    and inside the method make a pending intent and within the intent of the pending intent
     pass the int number as intent.putExtra("id",number);

public void Method(int id ,int hour , int minute, int seconds){

 Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY,hour);
            calendar.set(Calendar.MINUTE,minute);
            calendar.set(Calendar.SECOND,second);

 Intent alertIntent = new Intent(getApplicationContext(), AlertRec.class);
            alertIntent.putExtra("id",id);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),PendingIntent.getBroadcast(getApplicationContext(),id,alertIntent,PendingIntent.FLAG_UPDATE_CURRENT));

}

    ----------------------------------------------------
    2- at the Receiver class 


    //override the OnReceive method

    onReceive(Context context,Intent intent ){

     int Checker =intent.getExtras.getInt("id");

             if(Checker == 1 ) {

                 // do anything you want for the intent of the pending intent at MainActivity that have int id  = 1;
            //your method here

             }else if(Checker == 2) {

                 // do anything you want for the intent of the pending intent at MainActivity that have int id  = 2;
            // your method here

             }else{
    }

    }

关于java - AlarmManager 和接收器的多重通知 Android Studio Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56858496/

相关文章:

java - Android Studio - 在每个应用程序重新编译时重新编译java模块

Java - 如何阻止用户输入整数以外的内容?

android - 如何跨选项卡使用单个 fragment 中的 EditText?

android - 在 Android Studio 中开发的 Flutter 项目的合法 .gitignore 是什么?

Android Websocket 服务持久连接

android - 如何使进度条使用图像而不是在 Android 中使用颜色来显示进度

java - 如何在不丢帧的情况下将 ByteBuffer 转换为位图,反之亦然?

java - 无法从 java jar 运行 python 脚本

Java - CountDownLatch.await() 可以由编译器重新排序吗

java - 修改 Java SWT 浏览器用户代理