Будильник не срабатывает

141
22 ноября 2019, 21:10

Пишу код будильника для своего приложения, но он не срабатывает

 public class AlarmActivity extends BaseActivity implements View.OnClickListener {

        private Calendar mCalendar;
        private AlarmManager mAlarmManager;
        private Ringtone mRingtone;
        private PendingIntent mPendingIntent;
        private Intent mIntent;
        TimePicker mTimePicker;
        Handler myHandler = new Handler();
        Thread myThread = new Thread(new Runnable() {
            @Override
            public void run() {
                myHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        mCalendar = Calendar.getInstance();
                        final int hour = mCalendar.get(Calendar.HOUR_OF_DAY);
                        int minute = mCalendar.get(Calendar.MINUTE);
                        mCalendar.set(Calendar.HOUR_OF_DAY, 17);
                        mCalendar.set(Calendar.MINUTE, 13);
                        mCalendar.set(Calendar.SECOND, 0);
                        getReceiver();
                    }
                });
            }
        });
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_alarm);
// убрал код на поиск вьюшек и установку слушателей
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
            mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            mIntent = new Intent(getApplicationContext(), AlarmReceiver.class);
            Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
            mRingtone = RingtoneManager.getRingtone(getApplicationContext(), notification);
            mRingtone.play();
            myThread.start();
        }
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btnBeginSchedule:
                    startActivity(new Intent(getApplicationContext(), PlayExerciseActivity.class));
                    mRingtone.stop();
                    break;
                case R.id.btnCancelSchedule:
                    mRingtone.stop();
                    myThread.interrupt();
                    break;
                case R.id.btnDelaySchedule:
                    mRingtone.stop();
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    mPendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                    mAlarmManager.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), mPendingIntent);
                    AlarmActivity.this.finish();
                    break;
            }
        }
        public void getReceiver() {
            mPendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            mAlarmManager.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), mPendingIntent);
            mAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), AlarmManager.INTERVAL_HALF_HOUR, mPendingIntent);
        }
        @Override
        public void onBackPressed() {
            myThread.interrupt();
        }
    }

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Build.VERSION.SDK_INT >= 16) {
            Intent i = new Intent(context.getApplicationContext(), AlarmActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.putExtra("fast", true);
            i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
            context.startActivity(i);
            Log.d("Receiver", "text");
        }
    }
}

В манифесте есть вот это

<uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.SET_ALARM" />
<receiver android:name=".ui.alarm.AlarmReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
READ ALSO
Написание Unit - тестов в Android

Написание Unit - тестов в Android

Всем привет, пишу тестовое задание на Android - разработчика, и одним из требований является написание нескольких Jnit тестов (которые я ни разу...

124
Webkit android вывод элементов

Webkit android вывод элементов

Если ли какая нибудь возможность в webkit выводить определенные элементы/блоки со страницы сайта, работоспособныеНапример, есть мобильная...

119
Зачем нужно return this, внутри класса Builder, в шаблоне Builder

Зачем нужно return this, внутри класса Builder, в шаблоне Builder

У вас применен шаблон Builder и шаблон Fluent Interface

132
Не получается использовать Alarm Manager для повторения вызова функции

Не получается использовать Alarm Manager для повторения вызова функции

Хочу использовать AlarmManager, для того, чтобы приложение делало определенные действия в полночь (запись в бд), но не могу сконструировать простое...

122