BlackBerry Alarm Integeration

2019-08-01 04:29发布

Below is my application code. i want alarm to ring on my blackberry on every 6 of this month whether this apllication is running or not. please guide me in details i am a beginner.

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
import net.rim.device.api.util.*;

import java.util.*;

import java.lang.String.*;




public class ListChk extends UiApplication 
{
    String getFirstName;
    String getLastName;
    String getEmail;
    String getGender;
    String getStatus;
    String getCompany;

    /*declaring text fields for user input*/
    private AutoTextEditField firstName;

    private AutoTextEditField lastName;
    private AutoTextEditField company;

    private EmailAddressEditField email;

    /*declaring choice field for user input*/

    private ObjectChoiceField gender;

    /*declaring check box field for user input*/
    private CheckboxField status;

    //Declaring button fields
    private ButtonField save;
    private ButtonField close;
    private ButtonField List;
    private ButtonField search;

    /*declaring vector*/
    private static Vector _data;

    /*declaring persistent object*/
    private static PersistentObject store;

    /*creating an entry point*/
    public static void main(String[] args) 

    {
        ListChk objListChk = new ListChk();
        objListChk.enterEventDispatcher();

    }//end of main of ListChk

    public ListChk()
    {

        /*Creating an object of the main screen class to use its functionalities*/
        MainScreen mainScreen = new MainScreen();

        //setting title of the main screen
        mainScreen.setTitle(new LabelField("Enter Your Data"));

        //creating text fields for user input
        firstName = new AutoTextEditField("First Name: ", "");
        lastName= new AutoTextEditField("Last Name: ", "");
        email= new EmailAddressEditField("Email:: ", "");
        company = new AutoTextEditField("Company: ", "");

        //creating choice field for user input
        String [] items = {"Male","Female"};
        gender= new ObjectChoiceField("Gender",items);

        //creating Check box field
        status = new CheckboxField("Active",true);

        //creating Button fields and adding functionality using listeners

        // A button that saves the the user data persistently when it is clicked
        save = new ButtonField("Save",ButtonField.CONSUME_CLICK);
        save.setChangeListener(new FieldChangeListener()
        {
            public void fieldChanged(Field field, int context)
            {
                save();

            }
        });

        // a button which closes the entire application when clicked
        close = new ButtonField("Close",ButtonField.CONSUME_CLICK);
        close.setChangeListener(new FieldChangeListener()
        {
            public void fieldChanged(Field field, int context)
            {
                onClose();
            }
        });

        // A button that shows the List of all Data being stored persistently
        List = new ButtonField("List",ButtonField.CONSUME_CLICK);
        List.setChangeListener(new FieldChangeListener()
        {
            public void fieldChanged(Field field, int context){
                // pushing the next screen

                pushScreen(new ListScreen());



            }
        });

        search = new ButtonField("Search",ButtonField.CONSUME_CLICK);
        search.setChangeListener(new FieldChangeListener()
        {
            public void fieldChanged(Field field, int context)
            {
                pushScreen(new SearchScreen());
            }
        });
        //adding the input fields to the main screen
        mainScreen.add(firstName);
        mainScreen.add(lastName);
        mainScreen.add(email);
        mainScreen.add(company);
        mainScreen.add(gender);
        mainScreen.add(status);

        // Addning horizontal field manager
        HorizontalFieldManager horizontal = new HorizontalFieldManager(HorizontalFieldManager.FIELD_HCENTER);

        //adding buttons to the main screen in Horizontal field manager

        horizontal.add(close);
        horizontal.add(save);
        horizontal.add(List);
        horizontal.add(search);

        //Adding the horizontal field manger to the screen
        mainScreen.add(horizontal);

        //adding menu items

        mainScreen.addMenuItem(saveItem);
        mainScreen.addMenuItem(getItem);
        mainScreen.addMenuItem(Deleteall);

        //pushing the main screen
        pushScreen(mainScreen);
    }
    private MenuItem Deleteall = new MenuItem("Delete all",110,10)
    {
        public void run()
        {
            int response = Dialog.ask(Dialog.D_YES_NO,"Are u sure u want to delete entire Database");
            if(Dialog.YES == response){
            PersistentStore.destroyPersistentObject(0xdec6a67096f833cL);
            Dialog.alert("Closing Application");
            onClose();
            }
            else
                Dialog.inform("Thank God");
        }
    };
//adding functionality to menu item "saveItem"  
private MenuItem saveItem = new MenuItem("Save", 110, 10) 
{

        public void run() 
        {
            //Calling save method
            save();
        }
};
//adding functionality to menu item "saveItem"  
private MenuItem getItem = new MenuItem("Get", 110, 11) 
{
    //running thread for this menu item
    public void run() 
    {


            //synchronizing thread
            synchronized (store) 
            {
                //getting contents of the persistent object

                _data = (Vector) store.getContents();
                try{

                    for (int i = _data.size()-1; i >-1; i--) 
                    {

                        StoreInfo info = (StoreInfo)_data.elementAt(i);
                        //checking for empty object
                        if (!_data.isEmpty()) 
                        {
                        //if not empty
                        //create a new object of Store Info class






                        //storing information retrieved in strings
                        getFirstName    =   (info.getElement(StoreInfo.NAME));
                        getLastName     =   (info.getElement(StoreInfo.LastNAME));
                        getEmail        =   (info.getElement(StoreInfo.EMail));
                        getGender       =   (info.getElement(StoreInfo.GenDer));
                        getStatus       =   (info.getElement(StoreInfo.setStatus));
                        getCompany      =   (info.getElement(StoreInfo.setCompany));
                            //calling the show method
                        show();
                        }

                    }
                }
                catch(Exception e){}
            }   
        }


};
public void save()
{



    //creating an object of inner class StoreInfo
    StoreInfo info = new StoreInfo();
    //getting the test entered in the input fields
    info.setElement(StoreInfo.NAME, firstName.getText());
    info.setElement(StoreInfo.LastNAME,lastName.getText());
    info.setElement(StoreInfo.EMail, email.getText());
    info.setElement(StoreInfo.setCompany, company.getText());
    info.setElement(StoreInfo.GenDer,gender.toString());
    if(status.getChecked())
        info.setElement(StoreInfo.setStatus, "Active");
    else
        info.setElement(StoreInfo.setStatus, "In Active");
    //adding the object to the end of the vector
    _data.addElement(info);
    //synchronizing the thread
    synchronized (store) 
    {

        store.setContents(_data);
        store.commit();



    }
    //resetting the input fields

    Dialog.inform("Success!");
    firstName.setText(null);
    lastName.setText(null);
    email.setText("");
    company.setText(null);
    gender.setSelectedIndex("Male");
    status.setChecked(true);


}
//coding for persistent store
static {

store =
PersistentStore.getPersistentObject(0xdec6a67096f833cL);
synchronized (store) {
if (store.getContents() == null) {
store.setContents(new Vector());
store.commit();
}
}
_data = new Vector();
_data = (Vector) store.getContents();

}
//new class store info implementing persistable
private static final class StoreInfo implements Persistable 
{
    //declaring variables
    private Vector _elements;
    public static final int NAME = 0;
    public static final int LastNAME = 1;
    public static final int EMail= 2;
    public static final int GenDer = 3;
    public static final int setStatus = 4;
    public static final int setCompany = 5;
    public StoreInfo() 
    {
        _elements = new Vector(6);
        for (int i = 0; i < _elements.capacity(); ++i) 
        {
            _elements.addElement(new String(""));
        }
    }

    public String getElement(int id) 
    {
        return (String) _elements.elementAt(id);
    }
    public void setElement(int id, String value) 
    {
        _elements.setElementAt(value, id);
    }
}
//details for show method
public void show()
{
    Dialog.alert("Name is "+getFirstName+" "+getLastName+"\nGender is "+getGender+"\nE-mail: "+getEmail+"\nStatus is "+getStatus);
}
public void list()
{

    Dialog.alert("haha");


}

//creating save method

//overriding onClose method

public boolean onClose()
{


    System.exit(0);
    return true;
}

 class ListScreen extends MainScreen 
{
     String getUserFirstName;
     String getUserLastName;
     String getUserEmail;
     String getUserGender;
     String getUserStatus;
     String getUserCompany;
     String[] setData ;
     String getData = new String();
     String collectData = "";
     ObjectListField fldList;
     int counter = 0;

    private ButtonField btnBack;



    public ListScreen()
    {

        setTitle(new LabelField("Showing Data",LabelField.NON_FOCUSABLE));
        //getData = myList();
        //Dialog.alert(getData);

    //  setData = split(getData,"$");
    //  for(int i = 0;i<setData.length;i++)
    //  {
    //      add(new RichTextField(setData[i]+"@@@@@"));
    //  }
        showList();
        btnBack = new ButtonField("Back",ButtonField.CONSUME_CLICK|ButtonField.FIELD_HCENTER);
        btnBack.setChangeListener(new FieldChangeListener()
        {
            public void fieldChanged(Field field,int context)
            {
                UiApplication.getUiApplication().popScreen(getScreen());
            }
        });

        add(btnBack);



    }


    public void showList()
    {
        HorizontalFieldManager hfManager = new HorizontalFieldManager(HorizontalFieldManager.HORIZONTAL_SCROLLBAR|HorizontalFieldManager.HORIZONTAL_SCROLL);
        //SeparatorField spManager = new SeparatorField();
        LabelField lblcheck = new LabelField("check",LabelField.NON_FOCUSABLE);
        getData = myList();
        setData = split(getData,"$");
        fldList = new ObjectListField(ObjectListField.MULTI_SELECT);
        fldList.set(setData);
        //fldList.setEmptyString("heloo", 12);
        //hfManager.add(lblcheck);

        hfManager.add(fldList);
        //hfManager.add(spManager);
        add(hfManager);
        addMenuItem(new MenuItem("Select", 100, 1) {
            public void run() {
                int selectedIndex = fldList.getSelectedIndex();
                String item = (String)fldList.get(fldList, selectedIndex);
               pushScreen(new ShowDataScreen(item));
            }
            });

    }

    public String[] split(String inString, String delimeter) {
        String[] retAr;
        try {
            Vector vec = new Vector();
            int indexA = 0;
            int indexB = inString.indexOf(delimeter);

            while (indexB != -1) {
                vec.addElement(new String(inString.substring(indexA, indexB)));
                indexA = indexB + delimeter.length();
                indexB = inString.indexOf(delimeter, indexA);
            }
            vec.addElement(new String(inString.substring(indexA, inString
                    .length())));
            retAr = new String[vec.size()];
            for (int i = 0; i < vec.size(); i++) {
                retAr[i] = vec.elementAt(i).toString();
            }
        } catch (Exception e) {
            String[] ar = { e.toString() };
            return ar;
        }
        return retAr;
    }//end of Split Method



    public String myList()
    {


        _data = (Vector) store.getContents();
        try
        {
            for (int i = _data.size()-1; i >-1; i--,counter++) 
                {

                    StoreInfo info = (StoreInfo)_data.elementAt(i);
                    //checking for empty object
                    if (!_data.isEmpty()) 
                        {
                            //if not empty
                            //create a new object of Store Info class






                            //storing information retrieved in strings
                            //StoreInfo info = (StoreInfo)_data.lastElement();
                            getUserFirstName    =   (info.getElement(StoreInfo.NAME));
                            getUserLastName     =   (info.getElement(StoreInfo.LastNAME));
                            //getUserEmail      =   (info.getElement(StoreInfo.EMail));
                            //getUserGender         =   (info.getElement(StoreInfo.GenDer));
                            //getUserStatus     =   (info.getElement(StoreInfo.setStatus));
                            getUserCompany      =   (info.getElement(StoreInfo.setCompany));


        collectData = collectData + getUserFirstName+" "+getUserLastName+" "+getUserCompany+ "$";


                    }
                }


        }
            catch(Exception e){}


    return collectData;     

    }//end of myList method





    public boolean onClose()
    {
        System.exit(0);
        return true;
    }

}//end of class ListScreen

 class ShowDataScreen extends MainScreen
 {
     String getFirstName;
     String getLastName;
     String getCompany;
     String getEmail;
     String getGender;
     String getStatus;
     String[] getData;
     public ShowDataScreen(String data)
     {
        getData = split(data," ");
        getFirstName = getData[0];
        getLastName = getData[1];
        getCompany = getData[2];
        _data = (Vector) store.getContents();
        try
        {
            for (int i = _data.size()-1; i >-1; i--)
            {
                StoreInfo info = (StoreInfo)_data.elementAt(i);
                if (!_data.isEmpty()) 
                {
                    if((getFirstName.equalsIgnoreCase(info.getElement(StoreInfo.NAME))) && (getLastName.equalsIgnoreCase(info.getElement(StoreInfo.LastNAME))) && (getCompany.equalsIgnoreCase(info.getElement(StoreInfo.setCompany))))
                    {
                        getEmail = info.getElement(StoreInfo.EMail);
                        getGender = info.getElement(StoreInfo.GenDer);
                        getStatus = info.getElement(StoreInfo.setStatus);

                        HorizontalFieldManager hfManager = new HorizontalFieldManager(HorizontalFieldManager.NON_FOCUSABLE);

                        AutoTextEditField name = new AutoTextEditField("Name: ",getFirstName+" "+getLastName);
                        AutoTextEditField email = new AutoTextEditField("Email: ",getEmail);
                        AutoTextEditField company = new AutoTextEditField("Company: ",getCompany);
                        AutoTextEditField Gender = new AutoTextEditField("Gender: ",getGender);
                        AutoTextEditField status = new AutoTextEditField("Status: ",getStatus);
                        add(name);
                        add(email);
                        add(company);
                        add(Gender);
                        add(status);

                    }
                }

            }//end of for loop
        }//end of try
        catch(Exception e){}

        //Dialog.alert("fname is "+getFirstName+"\nlastname = "+getLastName+" company is "+getCompany);
     }




     public String[] split(String inString, String delimeter) {
            String[] retAr;
            try {
                Vector vec = new Vector();
                int indexA = 0;
                int indexB = inString.indexOf(delimeter);

                while (indexB != -1) {
                    vec.addElement(new String(inString.substring(indexA, indexB)));
                    indexA = indexB + delimeter.length();
                    indexB = inString.indexOf(delimeter, indexA);
                }
                vec.addElement(new String(inString.substring(indexA, inString
                        .length())));
                retAr = new String[vec.size()];
                for (int i = 0; i < vec.size(); i++) {
                    retAr[i] = vec.elementAt(i).toString();
                }
            } catch (Exception e) {
                String[] ar = { e.toString() };
                return ar;
            }
            return retAr;
        }//end of Split Method
 }






 class SearchScreen extends MainScreen
 {
     private ButtonField btnFirstName;
     private ButtonField btnLastName;
     private ButtonField btnSearch;
     private ButtonField btnEmail;
     private SeparatorField sp;
     String userName;
     HorizontalFieldManager hr = new HorizontalFieldManager();

    public AutoTextEditField searchField;

     public SearchScreen()
     {


         sp = new SeparatorField();
         setTitle(new LabelField("your Search Options"));
         add(new RichTextField("Search by : "));

         btnFirstName = new ButtonField("First Name",ButtonField.CONSUME_CLICK);
         hr.add(btnFirstName);

         btnFirstName.setChangeListener(new FieldChangeListener()
                 {
                    public void fieldChanged(Field field, int context) 
                    {
                        //HorizontalFieldManager hrs = new HorizontalFieldManager();
                        searchField = new AutoTextEditField("First Name: ","ali");
                        add(searchField);
                        btnSearch = new ButtonField("Search",ButtonField.CONSUME_CLICK);
                        btnSearch.setChangeListener(new FieldChangeListener()
                        {
                            public void fieldChanged(Field field, int context)
                            {
                                //Dialog.alert(searchField.getText());
                                pushScreen(new FirstnameScreen(searchField.getText()));
                                //FirstnameScreen obj = new FirstnameScreen();
                                //obj.name= searchField.getText();

                            }
                        });
                        add(btnSearch);
                        //hrs.add(sp);
                    }
                 });


         btnLastName = new ButtonField("Last Name",ButtonField.CONSUME_CLICK);
         hr.add(btnLastName);
         btnLastName.setChangeListener(new FieldChangeListener()
         {
             public void fieldChanged(Field field, int Context)
             {
                 searchField = new AutoTextEditField("Last Name: ","");
                    add(searchField);
                    btnSearch = new ButtonField("Search",ButtonField.CONSUME_CLICK);
                    btnSearch.setChangeListener(new FieldChangeListener()
                    {
                        public void fieldChanged(Field field, int context)
                        {
                            //Dialog.alert(searchField.getText());
                            pushScreen(new LastnameScreen(searchField.getText()));
                            //FirstnameScreen obj = new FirstnameScreen();
                            //obj.name= searchField.getText();

                        }
                    });
                    add(btnSearch);

             }
         });
         btnEmail = new ButtonField("Email",ButtonField.CONSUME_CLICK);
         hr.add(btnEmail);
         btnEmail.setChangeListener(new FieldChangeListener()
         {
             public void fieldChanged(Field field, int Context)
             {
                 searchField = new AutoTextEditField("Email: ","");
                    add(searchField);
                    btnSearch = new ButtonField("Search",ButtonField.CONSUME_CLICK);
                    btnSearch.setChangeListener(new FieldChangeListener()
                    {
                        public void fieldChanged(Field field, int context)
                        {
                            //Dialog.alert(searchField.getText());
                            pushScreen(new EmailScreen(searchField.getText()));
                            //FirstnameScreen obj = new FirstnameScreen();
                            //obj.name= searchField.getText();

                        }
                    });
                    add(btnSearch);
             }
         });   
         add(hr);

     }
     void myShow()
     {
         Dialog.alert(searchField.getText());
     }
 }



 class FirstnameScreen extends MainScreen
 {
     String userName;
     private Manager mGrid;
     String firstUserName;
     String lastUserName;
     String userEmail;
     String userGender;
     String userStatus;
     ButtonField btnBack;
     Font font; 


     public FirstnameScreen(String name)
     {
         setTitle(new LabelField("your Search Results"));
         add(new RichTextField("Search results for"+name));
         userName = name; 
         searchFirstName();
         btnBack = new ButtonField("Back",ButtonField.CONSUME_CLICK);
         btnBack.setChangeListener(new FieldChangeListener()
         {
             public void fieldChanged(Field field, int context)
             {
                 UiApplication.getUiApplication().popScreen(getScreen());
             }
         });
         add(btnBack);


     }


     public void searchFirstName()
     {

         ButtonField btnDelete;
            if (null != mGrid && null != mGrid.getManager())
                mGrid.getManager().delete(mGrid);
        int colWidth = net.rim.device.api.system.Display.getWidth() / 4; 
        mGrid = new GridFieldManager(new int[] { 0, colWidth, colWidth,
                        colWidth, colWidth }, VERTICAL_SCROLL | VERTICAL_SCROLLBAR);
        mGrid.add(new NullField(FOCUSABLE));
        mGrid.add(new LabelField("Name"));
        mGrid.add(new LabelField("E-Mail"));
        mGrid.add(new LabelField("Gender"));
        mGrid.add(new LabelField("Active"));
        //mGrid.add(new ButtonField("Delete"));

        //SeparatorField sps = new SeparatorField();
        //mGrid.add(sps);
        add(mGrid);
        _data = (Vector) store.getContents();
        try {

                for (int i = _data.size() - 1; i > -1; i--) {

                        StoreInfo info = (StoreInfo) _data.elementAt(i);
                        // checking for empty object
                        if (!_data.isEmpty()) {

                            firstUserName = (info.getElement(StoreInfo.NAME));
                            if(firstUserName.equalsIgnoreCase(userName))
                            {
                                // if not empty
                                // create a new object of Store Info class

                                // stored information retrieved in strings

                                lastUserName = (info.getElement(StoreInfo.LastNAME));
                                userEmail = (info.getElement(StoreInfo.EMail));
                                userGender = (info.getElement(StoreInfo.GenDer));
                                userStatus = (info.getElement(StoreInfo.setStatus));
                                final int sn = i;

                                // calling the listAll method
                                mGrid.add(new NullField(FOCUSABLE));
                                mGrid.add(new LabelField(firstUserName + " "
                                                + lastUserName));
                                mGrid.add(new LabelField(userEmail));
                                mGrid.add(new LabelField(userGender));
                                mGrid.add(new LabelField(userStatus));
                                btnDelete = new ButtonField("Delete",ButtonField.CONSUME_CLICK);
                                btnDelete.setChangeListener(new FieldChangeListener()
                                {
                                    public void fieldChanged(Field field, int context)
                                    {
                                        _data.removeElementAt(sn);
                                    }
                                });
                                add(btnDelete);

                               // SeparatorField sps1 = new SeparatorField();
                                //mGrid.add(sps1);




                            }


                        }

                }
        } catch (Exception e) {
        }


     }
 }




 class LastnameScreen extends MainScreen
 {

     String userName;
     private Manager mGrid;
     String firstUserName;
     String lastUserName;
     String userEmail;
     String userGender;
     String userStatus;
     ButtonField btnBack;
     Font font; 


     public LastnameScreen(String name)
     {
         setTitle(new LabelField("your Search Results"));

         add(new RichTextField("Search results for"+name));
         userName = name; 
         searchLastName();
         btnBack = new ButtonField("Back",ButtonField.CONSUME_CLICK);
         btnBack.setChangeListener(new FieldChangeListener()
         {
             public void fieldChanged(Field field, int context)
             {
                 UiApplication.getUiApplication().popScreen(getScreen());
             }
         });
         add(btnBack);
     }

     public void searchLastName()
     {

         ButtonField btnDelete;
            if (null != mGrid && null != mGrid.getManager())
                mGrid.getManager().delete(mGrid);
        int colWidth = net.rim.device.api.system.Display.getWidth() / 4; 
        mGrid = new GridFieldManager(new int[] { 0, colWidth, colWidth,
                        colWidth, colWidth }, VERTICAL_SCROLL | VERTICAL_SCROLLBAR);
        mGrid.add(new NullField(FOCUSABLE));
        mGrid.add(new LabelField("Name"));
        mGrid.add(new LabelField("E-Mail"));
        mGrid.add(new LabelField("Gender"));
        mGrid.add(new LabelField("Active"));
        //mGrid.add(new ButtonField("Delete"));

        //SeparatorField sps = new SeparatorField();
        //mGrid.add(sps);
        add(mGrid);
        _data = (Vector) store.getContents();
        try {

                for (int i = _data.size() - 1; i > -1; i--) {

                        StoreInfo info = (StoreInfo) _data.elementAt(i);
                        // checking for empty object
                        if (!_data.isEmpty()) {

                               lastUserName = (info.getElement(StoreInfo.LastNAME));
                            if(lastUserName.equalsIgnoreCase(userName))
                            {
                                // if not empty
                                // create a new object of Store Info class

                                // stored information retrieved in strings
                                firstUserName = (info.getElement(StoreInfo.NAME));

                                userEmail = (info.getElement(StoreInfo.EMail));
                                userGender = (info.getElement(StoreInfo.GenDer));
                                userStatus = (info.getElement(StoreInfo.setStatus));
                                final int sn = i;

                                // calling the listAll method
                                mGrid.add(new NullField(FOCUSABLE));
                                mGrid.add(new LabelField(firstUserName + " "
                                                + lastUserName));
                                mGrid.add(new LabelField(userEmail));
                                mGrid.add(new LabelField(userGender));
                                mGrid.add(new LabelField(userStatus));
                                btnDelete = new ButtonField("Delete",ButtonField.CONSUME_CLICK);
                                btnDelete.setChangeListener(new FieldChangeListener()
                                {
                                    public void fieldChanged(Field field, int context)
                                    {
                                        _data.removeElementAt(sn);
                                    }
                                });
                                add(btnDelete);

                               // SeparatorField sps1 = new SeparatorField();
                                //mGrid.add(sps1);




                            }


                        }

                }
        } catch (Exception e) {
        }


     }
 }
 class EmailScreen extends MainScreen
 {
     String userName;
     private Manager mGrid;
     String firstUserName;
     String lastUserName;
     String userEmail;
     String userGender;
     String userStatus;
     ButtonField btnBack;
     Font font; 


     public EmailScreen(String mail)
     {
         setTitle(new LabelField("your Search Results"));
         add(new RichTextField("Search results for"+mail));
         userName = mail; 
         searchEmail();
         btnBack = new ButtonField("Back",ButtonField.CONSUME_CLICK);
         btnBa

标签: blackberry
1条回答
Ridiculous、
2楼-- · 2019-08-01 05:22

What are the benefits of integrating with the built-in alarm application? Would it be better for your application to place an event in the device's calendar and make the event show a reminder?

If you have to have a more prominent alarm, why not do it yourself? An alarm is an action the phone does (either make a sound and/or vibrate) that shows on the screen why it is taking that action and the action stops when someone responds to it.

Can you just make an app that starts in the background, checks the day, and makes a sound/vibrates on that day?

The default Alarm app on my phone only supports one time to ring. If I set it to wake me up at 4 a.m., but your app reschedules the alarm on my phone for 8 a.m., you would instantly lose a customer (after I wake up 4 hours too late).

查看更多
登录 后发表回答