Broadcast Receiver issue, Wakeful Broadcast Receiver

Viewed 25

I'm using wakeful broadcast receiver with alarm manager in my app to performing some tasks at a specific time. its working well. But I'm facing a minor problem for example I set my alarm manager at 9:00 PM after that if I remove my app from recent app it's definitely working in background, But after that specific time (9:00 PM) whenever I'm using my app my alarm trigger immediately. I hope everyone (relating this problem) understand my point. If anyone knows about this problem tell me. Thanks.

Here I'm registering my receiver

        <receiver
        android:name="com.example.chartdemo.MyBroadcastReceiver"
        android:enabled="true"
        android:exported="true">

       </receiver>

Here's my MainActivity.java code

public class MainActivity extends AppCompatActivity {
public  static TextView textView,textView1;
Button button, button1,button2,button3;
public static int counter=0, time;
MyBroadcastReceiver myBroadcastReceiver;
myDbAdapter helper;
//private final MyDateChangeReceiver mDateReceiver = new MyDateChangeReceiver();
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=findViewById(R.id.text);
        textView1=findViewById(R.id.text1);
        button=findViewById(R.id.counterbtn);
        button1=findViewById(R.id.showbtn);
        button2=findViewById(R.id.savebtn);
        button3=findViewById(R.id.delbtn);
        helper = new myDbAdapter(this);

        loadData(); //for data retrieving from shared preferences


        startAlarm(this);
    }


private void startAlarm(Context context) {

        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 9);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        cal.set(AM_PM, PM);
        time= (int) cal.getTimeInMillis();

        AlarmManager alarmManager = (AlarmManager)context.getSystemService(ALARM_SERVICE);
        Intent intent = new Intent(context, MyBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 234, intent, 0);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
            Toast.makeText(context, "alarm set after "+cal.getTimeInMillis(), Toast.LENGTH_SHORT).show();
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
            Toast.makeText(context, "alarm set after "+cal.getTimeInMillis(), Toast.LENGTH_SHORT).show();
        } else {
            alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
            Toast.makeText(context, "alarm set after "+cal.getTimeInMillis(), Toast.LENGTH_SHORT).show();
        }


    }

And Here's my WakefulBroadcastReceiver.java code

 public class MyBroadcastReceiver extends WakefulBroadcastReceiver  {
    MediaPlayer mp;
    myDbAdapter helper;
    MainActivity mainActivity=new MainActivity();


        @Override
        public void onReceive(Context context, Intent intent) {

                SharedPreferences sh = context.getSharedPreferences("MySharedPref", MODE_PRIVATE);
                int a = sh.getInt("counter", 0);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String date = sdf.format(new Date());
                helper = new myDbAdapter(context);
                long id = helper.insertData(date, String.valueOf(a));
                if (id <= 0) {
                Toast.makeText(context, "Insertion UnSuccessful", Toast.LENGTH_SHORT).show();
                } else {
                Toast.makeText(context, "Insertion Successful", Toast.LENGTH_SHORT).show();
                }
                mp = MediaPlayer.create(context, R.raw.alarm);
                mp.start();
                Toast.makeText(context, "Alarm...!!!!!! ", Toast.LENGTH_LONG).show();
                SharedPreferences sharedPreferences = context.getSharedPreferences("MySharedPref", MODE_PRIVATE);
                SharedPreferences.Editor myEdit = sharedPreferences.edit();
                myEdit.putInt("counter", 0);
                myEdit.commit();

        }
0 Answers
Related