Android 使用AlarmManager激活和停用静音模式

Android 使用AlarmManager激活和停用静音模式,android,android-studio,alarmmanager,Android,Android Studio,Alarmmanager,在我的程序中,我从用户那里得到了两个日期。第一个日期用于激活静音模式,第二个日期用于禁用静音模式。为了处理这个问题,我尝试使用2个不同的AlarmManager和2个不同的BroadcastReceiver,但我无法实现。 我可以在第一次约会时激活沉默模式,但无法将其停用。这是我代码的一部分: public class AddEvent extends AppCompatActivity { private static PendingIntent silenceActivatorPen

在我的程序中,我从用户那里得到了两个日期。第一个日期用于激活静音模式,第二个日期用于禁用静音模式。为了处理这个问题,我尝试使用2个不同的AlarmManager和2个不同的BroadcastReceiver,但我无法实现。 我可以在第一次约会时激活沉默模式,但无法将其停用。这是我代码的一部分:

public class AddEvent extends AppCompatActivity {
    private static PendingIntent silenceActivatorPendingIntent;
    private static PendingIntent silenceDeactivatorPendingIntent;
    private static AlarmManager manager1;
    private static AlarmManager manager2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Intent silenceActivatorIntent = new Intent(this, SilenceModeActivator.class);
        Intent silenceDeactivatorIntent = new Intent(this, SilenceModeDeactivator.class);
        silenceActivatorPendingIntent = PendingIntent.getBroadcast(this, 0, silenceActivatorIntent, 0);
        silenceDeactivatorPendingIntent = PendingIntent.getBroadcast(this, 0, silenceDeactivatorIntent, 0);
        manager2 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        manager1 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
   }

   public void addEvent(View view) {
       GregorianCalendar targetStartDate = new GregorianCalendar(startYear, startMonth, startDay, startHour, startMinute, 0);
       GregorianCalendar targetEndDate = new GregorianCalendar(endYear, endMonth, endDay, endHour, endMinute, 0);
       manager1.set(AlarmManager.RTC_WAKEUP, targetStartDate.getTimeInMillis(), silenceActivatorPendingIntent);
       manager2.set(AlarmManager.RTC_WAKEUP, targetEndDate.getTimeInMillis(), silenceDeactivatorPendingIntent);
   }

   public static void stopAlarm1() {
    manager1.cancel(silenceActivatorPendingIntent);
   }

   public static void stopAlarm2() {
    manager2.cancel(silenceDeactivatorPendingIntent);
  }
}
addEvent是我的按钮点击器方法

静音模式激活器:

public class SilenceModeActivator extends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {
    activateSilentMode(context);
    AddEvent.stopAlarm1();
}

public void activateSilentMode(Context context) {

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

    // Check if the notification policy access has been granted for the app.
    if (!mNotificationManager.isNotificationPolicyAccessGranted()) {
        Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
        context.startActivity(intent);
    }

    mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
}
}
静音模式停用器:

public class SilenceModeDeactivator extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    deactivateSilentMode(context);
    AddEvent.stopAlarm2();
}

public void deactivateSilentMode(Context context) {

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

    // Check if the notification policy access has been granted for the app.
    if (!mNotificationManager.isNotificationPolicyAccessGranted()) {
        Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
        context.startActivity(intent);
    }

    mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);
}
}
你知道我该怎么解决这个问题吗?
提前感谢。

为什么不使用AudioManager振铃器模式来启用或禁用静音模式?我试过了,但出现了错误。我使用的是API 23,它不允许我激活静音模式。此链接可能对您有所帮助。见第一个答案。在那里,他提到了notificationManager.getCurrentInterruptionFilter();重置过滤器。非常感谢,现在我可以使用AudioManager启用静默模式,但关于AlarmManager,我仍然有问题。你知道吗?停止报警1/2的目的是什么?为什么需要取消警报?为什么不使用AudioManager振铃器模式来启用或禁用静音模式?我尝试过,但出现了错误。我使用的是API 23,它不允许我激活静音模式。此链接可能对您有所帮助。见第一个答案。在那里,他提到了notificationManager.getCurrentInterruptionFilter();重置过滤器。非常感谢,现在我可以使用AudioManager启用静默模式,但关于AlarmManager,我仍然有问题。你知道吗?停止报警1/2的目的是什么?为什么需要取消警报?