Mostrar la notificación de la barra de estado de Android en una fecha particular,

Ayúdame a resolver esto.

Tengo alguna fecha en la base de datos local, todos los días quiero verificar la fecha de la base de datos y la fecha actual en un momento determinado, si la fecha de la base de datos coincide con la fecha actual Mostrar notificación en la barra de estado

He agregado mi código,

iniciar sesión -> MyNotificationService -> ScheduleClient -> ScheduleServcie -> AlarmTask -> NotifyService Flow, aquí Una vez que se inicia el servicio, se recuperan los datos de la base de datos, pero la condición no se verifica todos los días. Deseo verificar la base de datos local Fecha guardada y fecha actual, si ambas son iguales, inicie la notificación.

Este enlace lo he usado para referencia

Sign_in.Java

import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class sign_in extends Activity implements OnClickListener {

    TextView Signin, ForgotPasword;
    private EditText EMAIL, PASSWORD;
    private Button login;

    // for Shared preferences
    public static String email = "";
    public static String password = "";
    public static String storedPassword = "";


    // This is a handle so that we can call methods on our service
    private ScheduleClient scheduleClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.sign_in);

        // Session Manager
        session = new SessionManagerFor_Signin(getApplicationContext());


        DB = new DataBaseConnector_forsignUp(this);
        DB = DB.open();

        Signin = (TextView) findViewById(R.id.textView1);
        login = (Button) findViewById(R.id.button1);
        ForgotPasword = (TextView) findViewById(R.id.textView4);
        EMAIL = (EditText) findViewById(R.id.editText1);
        PASSWORD = (EditText) findViewById(R.id.editText2);

        login.setOnClickListener(this);


        //new Service bind for Notification
                // Create a new service client and bind our activity to this service
                scheduleClient = new ScheduleClient(this);
                scheduleClient.doBindService();

    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {

        case R.id.button1:


            email = EMAIL.getText().toString();
            password = PASSWORD.getText().toString();

            session.createLoginSession(email, password);

            if (email.equals("") || password.equals("")) {
                // user didn't entered user name or password
                // Show alert asking him to enter the details
                alert.showAlertDialog(sign_in.this, "Login failed...","Please Enter Email and Password", false);

            } else {

                // fetch the Password form database for respective Email
                storedPassword = DB.getSinlgeEntry(email);
                if (password.equals(storedPassword)) {

                    Toast.makeText(sign_in.this, "Login Successfull",Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(sign_in.this, Page1.class);

                    startActivity(intent);
                    finish();


                    //Calling the Notication for Notification Process
                    Intent myIntent1 = new Intent(sign_in.this,MyNotificationService.class);
                    pendingintent2 = PendingIntent.getService(sign_in.this, 0,myIntent1, 0);
                    AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE);
                    Calendar calendar1 = Calendar.getInstance();
                    calendar1.setTimeInMillis(System.currentTimeMillis());
                    calendar1.add(Calendar.SECOND, 40);
                    alarmManager1.set(AlarmManager.RTC_WAKEUP,calendar1.getTimeInMillis(), pendingintent2);

                    long time24h = 24*60*60*1000;

                    alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP,calendar1.getTimeInMillis(), time24h,pendingintent2);

                    // get Internet status
                    isInternetPresent = cd1.isConnectingToInternet();

                }


        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Close The Database
        DB.close();
    }



    //Stop the Notification
     @Override
        protected void onStop() {
            // When our activity is stopped ensure we also stop the connection to the service
            // this stops us leaking our activity into the system *bad*
            if(scheduleClient != null)
                scheduleClient.doUnbindService();
            super.onStop();
        }
}

MyNotificationService .Java

package com.example;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.example.database.DatabaseConnector_forProduct;
import com.example.service.ScheduleClient;
import com.example.web.ProductPojo;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;


public class MyNotificationService extends Service

{

    // This is a handle so that we can call methods on our service
    private ScheduleClient scheduleClient;
    DatabaseConnector_forProduct helper=new DatabaseConnector_forProduct(this);
    public String ExpiryDate;
    private String TAG1 = "Notify..!!";
    @Override
    public void onCreate() 
    {
        Log.i(TAG1, "Notification Created");
        //new Service bind for Notification
                // Create a new service client and bind our activity to this service
                scheduleClient = new ScheduleClient(this);
                scheduleClient.doBindService();

    }
    @Override
    public IBinder onBind(Intent intent) 
    {
    //Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
    return null;
    }
    @Override
    public void onDestroy() 
    {
    super.onDestroy();



    }

    @SuppressWarnings("deprecation")
    @Override
    public void onStart(Intent intent, int startId) 
    {
    super.onStart(intent, startId);

     try 
     {

         List<ProductPojo> val1 = helper.getAllvalues();
           //    "Reading all data..from Db ", Toast.LENGTH_LONG).show();

              for (int i=0;i<val1.size();i++) 
              {

                  ExpiryDate = val1.get(i).getExpiry_Date();

                //for Showing List view  Data
                String dt = ExpiryDate;
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                Calendar cd = Calendar.getInstance();
                try
                {
                    cd.setTime(sdf.parse(dt));

                } 
                catch (ParseException e) 
                {
                    e.printStackTrace();
                }


                SimpleDateFormat sdfr = new SimpleDateFormat("yyyy-MM-dd");
                Calendar cal = Calendar.getInstance();
                Date Warranty_Expired_Date = sdfr.parse(sdfr.format(cd.getTime()));
                String dateExpiry=Warranty_Expired_Date.toString();
                Date Current_Date = sdfr.parse(sdfr.format(cal.getTime()));
                Log.i(TAG1,dateExpiry+"=="+Current_Date);

         if(Warranty_Expired_Date.equals(Current_Date))
         {
            Calendar cd1 = Calendar.getInstance();
            /*int DaySpecific = cd1.get(Calendar.DAY_OF_MONTH);
            int month_Specfic = cd1.get(Calendar.MONTH);
            int year_Specific = cd1.get(Calendar.YEAR);
            cd1.set(year_Specific, month_Specfic, DaySpecific);
            cd1.set(Calendar.HOUR_OF_DAY, 5);//24 Hour Format
            cd1.set(Calendar.MINUTE, 30);
            cd1.set(Calendar.SECOND, 0);*/
        // Ask our service to set an alarm for that date, this activity talks to the client that talks to the service
            scheduleClient.setAlarmForNotification(cd1);
         }
         else
         {

         }

 }

     } 
     catch (Exception e) 
     {
         e.printStackTrace();
         Log.i(TAG1,"Exception Caught");

     }



    }

    @Override
    public boolean onUnbind(Intent intent)
    {

    return super.onUnbind(intent);

    }



}

AlarmTask.Java

package com.example.service.task;

import java.util.Calendar;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;

import com.example.service.NotifyService;


public class AlarmTask implements Runnable{
    // The date selected for the alarm
    private final Calendar date;
    // The android system alarm manager
    private final AlarmManager am;
    // Your context to retrieve the alarm manager from
    private final Context context;

    public AlarmTask(Context context, Calendar date) {
        this.context = context;
        this.am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        this.date = date;
    }

    @Override
    public void run() {
        // Request to start are service when the alarm date is upon us
        // We don't start an activity as we just want to pop up a notification into the system bar not a full activity
        Intent intent = new Intent(context, NotifyService.class);
        intent.putExtra(NotifyService.INTENT_NOTIFY, true);
        PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

        // Sets an alarm - note this alarm will be lost if the phone is turned off and on again
        am.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);



        /*// setRepeating() lets you specify a precise custom interval--in this case,
        // 20 minutes.
        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                1000 * 60 * 20, alarmIntent);*/


    }
}

NotifyService.Java

package com.example.service;

import com.example.Page1;

import android.R;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

public class NotifyService extends Service {

    /**
     * Class for clients to access
     */
    public class ServiceBinder extends Binder {
        NotifyService getService() {
            return NotifyService.this;
        }
    }

    // Unique id to identify the notification.
    private static final int NOTIFICATION = 123;
    // Name of an intent extra we can use to identify if this service was started to create a notification  
    public static final String INTENT_NOTIFY = "com.blundell.tut.service.INTENT_NOTIFY";
    // The system notification manager
    private NotificationManager mNM;

    @Override
    public void onCreate() {
        Log.i("NotifyService", "onCreate()");
        mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("LocalService", "Received start id " + startId + ": " + intent);

        // If this service was started by out AlarmTask intent then we want to show our notification
        if(intent.getBooleanExtra(INTENT_NOTIFY, false))
            showNotification();

        // We don't care if this service is stopped as we have already delivered our notification
        return START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    // This is the object that receives interactions from clients
    private final IBinder mBinder = new ServiceBinder();

    /**
     * Creates a notification and shows it in the OS drag-down status bar
     */
    @SuppressWarnings("deprecation")
    private void showNotification() {
        // This is the 'title' of the notification
        CharSequence title = " Alert...!";
        // This is the icon to use on the notification
        int icon = R.drawable.ic_dialog_alert;
        // This is the scrolling text of the notification
        CharSequence text = "Alert Today..!";       
        // What time to show on the notification
        long time = System.currentTimeMillis();

        Notification notification = new Notification(icon, text, time);

        // The PendingIntent to launch our activity if the user selects this notification
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, Page1.class), 0);

        // Set the info for the views that show in the notification panel.
        notification.setLatestEventInfo(this, title, text, contentIntent);

        // Clear the notification when it is pressed
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        // Send the notification to the system.
        mNM.notify(NOTIFICATION, notification);

        // Stop the service when we are finished
        stopSelf();
    }
}

ScheduleClient.java

package com.example.service;

import java.util.Calendar;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;


public class ScheduleClient {

    // The hook into our service
    private  ScheduleService mBoundService;
    // The context to start the service in
    private Context mContext;
    // A flag if we are connected to the service or not
    private boolean mIsBound;

    public ScheduleClient(Context context) {
        mContext = context;
    }

    /**
     * Call this to connect your activity to your service
     */
    public void doBindService() {
        // Establish a connection with our service
        mContext.bindService(new Intent(mContext, ScheduleService.class), mConnection, Context.BIND_AUTO_CREATE);
        mIsBound = true;
    }


    private ServiceConnection mConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName className, IBinder service) {
            // This is called when the connection with our service has been established, 
            // giving us the service object we can use to interact with our service.
            mBoundService = ((ScheduleService.ServiceBinder) service).getService();
        }

        public void onServiceDisconnected(ComponentName className) {
            mBoundService = null;
        }
    };

    /**
     * Tell our service to set an alarm for the given date
     * @param c a date to set the notification for
     */
    public void setAlarmForNotification(Calendar c){
        mBoundService.setAlarm(c);
    }

    /**
     * When you have finished with the service call this method to stop it 
     * releasing your connection and resources
     */
    public void doUnbindService() {
        if (mIsBound) {
            // Detach our existing connection.
            mContext.unbindService(mConnection);
            mIsBound = false;
        }
    }
}

ScheduleService.java

package com.example.service;

import java.util.Calendar;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

import com.example.service.task.AlarmTask;

public class ScheduleService extends Service {

    /**
     * Class for clients to access
     */
    public class ServiceBinder extends Binder {
        ScheduleService getService() {
            return ScheduleService.this;
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("ScheduleService", "Received start id " + startId + ": " + intent);

        // We want this service to continue running until it is explicitly stopped, so return sticky.
        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    // This is the object that receives interactions from clients. See
    private final IBinder mBinder = new ServiceBinder();

    /**
     * Show an alarm for a certain date when the alarm is called it will pop up a notification
     */
    public void setAlarm(Calendar c) {
        // This starts a new thread to set the alarm
        // You want to push off your tasks onto a new thread to free up the UI to carry on responding
        new AlarmTask(this, c).run();
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta