Мой BroadcastReceiver не получает правильно - PullRequest
0 голосов
/ 06 ноября 2018

Я сделал BroadcastReceiver, чтобы сделать уведомление для пользователя на основе времени, которое он установит, при настройке времени я получаю совершенно корректные журналы о текущем времени и разнице между текущим и выбранным временем, но во время работы приложения он отправляет уведомление о выбранном времени! (Пример: - если текущее время - 18:00, и мне нужно установить будильник через 1 мин, я выберу 6:01 вечера. В моих журналах разница составляет 60000 мсек, что верно! Но тревога в мобильном телефоне мгновенно срабатывает примерно через 5 секунд независимо от того, Я установил это 6:01 вечера или 12:00 вечера) Мой код в Main или addNewMedicine.class и мой AlarmReceiver.class: -

package com.example.a2879.dialogs.MainActivities;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;


import com.example.a2879.dialogs.BroadcastReceivers.AlarmReceiver;
import com.example.a2879.dialogs.DataBase.Model.Medicine;
import com.example.a2879.dialogs.DataBase.Model.User_Medicine_Join;
import com.example.a2879.dialogs.DataBase.MyDataBase;
import com.example.a2879.dialogs.MainActivities.BaseActivity;
import com.example.a2879.dialogs.MainActivities.HomePage;
import com.example.a2879.dialogs.R;

import java.util.Calendar;

import static com.example.a2879.dialogs.MainActivities.Login.userIdPublic;

public class addNewMedicine extends BaseActivity {

    private EditText medicineTextView;
    private EditText medicineNotesTextView;
    private TextView timeToTake;
    private Button buttonadd;
    TimePickerDialog mTimePicker;
    Calendar mcurrentTime;
    int hour;
    int minute;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_new_medicine);
        getSupportActionBar().hide();
        initView();

        timeToTake.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               /* mcurrentTime = Calendar.getInstance();
                final int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
                final int minute = mcurrentTime.get(Calendar.MINUTE);*/

                mTimePicker = new TimePickerDialog(activity, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                        hour = selectedHour;
                        Log.e("hour","is : "+hour);
                        minute = selectedMinute;
                        Log.e("mintune","is : "+minute);
                        timeToTake.setText(hour + ":" + minute);
                    }
                }, Calendar.getInstance().get(Calendar.HOUR_OF_DAY), Calendar.getInstance().get(Calendar.MINUTE), false);
                mTimePicker.setTitle("Select Time");
                mTimePicker.show();
            }
        });


        buttonadd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String medicineName = medicineTextView.getText().toString();
                String Notes = medicineNotesTextView.getText().toString();
                String TimePicked = timeToTake.getText().toString();

                Medicine newMedicine = new Medicine(medicineName, TimePicked, Notes);

                long medicine_id = MyDataBase.getDataBaseInstance(activity).medicineDao().insertToMedicine(newMedicine);

                User_Medicine_Join user_medicine_join = new User_Medicine_Join(userIdPublic, medicine_id);
                MyDataBase.getDataBaseInstance(activity).user_medicine_dao().insertToUserMedicineJoin(user_medicine_join);

                addAlarm(hour, minute);

                showMessage("Success!", "Added to List", getResources().getColor(R.color.colorPrimary));

                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        Intent intent = new Intent(activity, HomePage.class);
                        startActivity(intent);
                        finish();
                    }
                }, 1000);
            }
        });
    }


    private void initView() {
        medicineTextView = (EditText) findViewById(R.id.medicineTextView);
        medicineNotesTextView = (EditText) findViewById(R.id.medicineNotesTextView);
        timeToTake = (TextView) findViewById(R.id.timeToTake);
        buttonadd = (Button) findViewById(R.id.buttonadd);
    }


    public void addAlarm(int Hours, int Mintunes) {

        Calendar calender = Calendar.getInstance();
        int hourofDay = calender.get(Calendar.HOUR_OF_DAY);
        int mintuneofDay = calender.get(Calendar.MINUTE);

        long triggerTime = ((Hours - hourofDay) * 60 * 60 * 1000) + ((Mintunes - mintuneofDay) * 60 * 1000);
        Log.e("difference","is : "+triggerTime);

        Intent startIntent = new Intent(activity, AlarmReceiver.class);
        startIntent.putExtra("medicineName",medicineTextView.getText().toString());

        PendingIntent startPIntent = PendingIntent.getBroadcast(activity, 0, startIntent, 0);
        AlarmManager alarm = (AlarmManager) getSystemService(activity.ALARM_SERVICE);
        alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);

    }

}

----------------------------------------------------------------------

package com.example.a2879.dialogs.BroadcastReceivers;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.v4.app.NotificationCompat;
import android.util.Log;

import com.example.a2879.dialogs.R;

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        String medicineName = intent.getStringExtra("medicineName");
        showNotification(context, medicineName);

    }


    public void showNotification(Context context, String title) {

        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        long[] vibrate = {0, 100, 200, 300};

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "Medicine")
                .setSmallIcon(R.drawable.notification_icon)
                .setContentTitle(title)
                .setSound(notification)
                .setVibrate(vibrate)
                .setAutoCancel(false)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(0, mBuilder.build());
        Log.e("Alarm","ss");

    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...