BlackBerry Alarm Integration

时间:2010-01-07 11:19:03

标签: blackberry

以下是我的应用程序代码。我想在这个月的每个月6日在我的黑莓手机上响铃,无论这个应用程序是否正在运行。请详细指导我,我是初学者。

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

1 个答案:

答案 0 :(得分:0)

与内置警报应用程序集成有什么好处?您的应用程序在设备日历中放置事件并使事件显示提醒会更好吗?

如果你必须有一个更突出的警报,为什么不自己做?警报是电话执行的操作(发出声音和/或振动),在屏幕上显示为什么采取该操作,当有人响应时,操作停止。

你可以制作一个在后台开始的应用程序,检查当天,并在当天发出声音/振动吗?

手机上的默认闹钟应用只支持一次响铃。如果我把它设置为凌晨4点叫醒我,但是你的应用程序在我的手机上重新安排闹钟上午8点,你会立即失去一个客户(我太迟醒了4个小时后)。