1

In my program, I am getting 2 dates from user. First date is for activating silence mode and the second date is deactivating it. For handling this issue, I have tried to use 2 different AlarmManager and 2 different BroadcastReceiver but I couldn't achieve it. I can activate silence mode at the first date but I couldn't deactivate it. This a part of my code:

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 is my button clicker method.

Silence Mode Activator:

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);
}
}

Silence Mode Deactivator:

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);
}
}

Do you have any idea about how I can fix this? Thanks in advance.

Vital
  • 11
  • 3
  • Why don't you use AudioManager Ringer mode to enable or disable silent mode? – Febi M Felix Dec 22 '16 at 10:01
  • I tried it but it gave error. I am using API 23 and it doesn't allow me to activate silence mode. – Vital Dec 22 '16 at 10:04
  • http://stackoverflow.com/questions/39151453/in-android-7-api-level-24-my-app-is-not-allowed-to-mute-phone-set-ringer-mode This link might help you. See the first answer. There he mentioned about notificationManager.getCurrentInterruptionFilter(); to reset the filter. – Febi M Felix Dec 22 '16 at 10:11
  • Thank you very much, now I can enable silent mode using AudioManager but I still have problems about AlarmManager. Do you have any idea about it? – Vital Dec 22 '16 at 10:29
  • what's the purpose of stopAlarm1/2? why do you need to cancel the alarms? – marmor Dec 22 '16 at 10:38
  • What is your issue? – Febi M Felix Dec 22 '16 at 10:43
  • I want to get more than 1 time interval from user. For example user entered start date, end date and clicked AddEvent button. Then, I want him/her to give another start and end date and I will use these dates again in the same alarmManagers. Shouldn't I cancel the alarms? – Vital Dec 22 '16 at 10:46
  • Actuallly, I want these alarmManagers to schedule enabling and disabling silent mode with given dates. However, I cannot achieve this to disable silent mode. It's enabled at the start Date but then it doesn't be disabled by my manager2 at the end time. – Vital Dec 22 '16 at 10:52
  • Please refer this website http://www.concretepage.com/android/android-alarm-clock-tutorial-to-schedule-and-cancel-alarmmanager-pendingintent-and-wakefulbroadcastreceiver-example – Arati PAtel Dec 22 '16 at 13:21

0 Answers0