예제 #1
0
        public void SetReminder(int hour, int min, string title, string content)
        {
            _title   = title;
            _content = content;
            var calendar    = Calendar.GetInstance(Locale.Default);
            var setCalendar = Calendar.GetInstance(Locale.Default);

            setCalendar.Set(CalendarField.HourOfDay, hour);
            setCalendar.Set(CalendarField.Minute, min);
            setCalendar.Set(CalendarField.Second, 0);
            CancelReminder();
            if (setCalendar.Before(calendar))
            {
                setCalendar.Add(CalendarField.Date, 1);
            }

            var alarmReceiver = new AlarmReceiver(title, content);

            var componentName  = new ComponentName(Application.Context, alarmReceiver.Class);
            var packageManager = Application.Context.PackageManager;

            packageManager.SetComponentEnabledSetting(componentName, ComponentEnabledState.Enabled, ComponentEnableOption.DontKillApp);

            var intent = new Intent(Application.Context, alarmReceiver.Class);

            intent.PutExtra(TitleKey, title);
            intent.PutExtra(MessageKey, content);
            var pendingIntent = PendingIntent.GetBroadcast(Application.Context, DAILY_REMINDER_REQUEST_CODE, intent,
                                                           PendingIntentFlags.UpdateCurrent);
            var alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService);

            alarmManager.SetInexactRepeating(AlarmType.RtcWakeup, setCalendar.TimeInMillis, AlarmManager.IntervalDay, pendingIntent);
        }
        public void CreateKeyPair()
        {
            DeleteKey();

            KeyPairGenerator keyGenerator =
                KeyPairGenerator.GetInstance(KeyProperties.KeyAlgorithmRsa, KEYSTORE_NAME);

            if (Build.VERSION.SdkInt >= BuildVersionCodes.JellyBeanMr2 &&
                Build.VERSION.SdkInt <= BuildVersionCodes.LollipopMr1)
            {
                var calendar = Calendar.GetInstance(_context.Resources.Configuration.Locale);
                var endDate  = Calendar.GetInstance(_context.Resources.Configuration.Locale);
                endDate.Add(CalendarField.Year, 20);

                //this API is obsolete after Android M, but I am supporting Android L, so I need this
#pragma warning disable 618
                var builder = new KeyPairGeneratorSpec.Builder(_context)
#pragma warning restore 618
                              .SetAlias(_keyName).SetSerialNumber(BigInteger.One)
                              .SetSubject(new X500Principal($"CN={_keyName} CA Certificate"))
                              .SetStartDate(calendar.Time)
                              .SetEndDate(endDate.Time).SetKeySize(KeySize);

                keyGenerator.Initialize(builder.Build());
            }
            else if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                var builder =
                    new KeyGenParameterSpec.Builder(_keyName, KeyStorePurpose.Encrypt | KeyStorePurpose.Decrypt)
                    .SetBlockModes(KeyProperties.BlockModeEcb)
                    .SetEncryptionPaddings(KeyProperties.EncryptionPaddingRsaPkcs1)
                    .SetRandomizedEncryptionRequired(false).SetKeySize(KeySize);

                keyGenerator.Initialize(builder.Build());
            }

            keyGenerator.GenerateKeyPair();
        }