使用service在后台不断扫描系统时间,扫描到整点的就启动铃声播放,注意改变电源管理模式,不要让cpu睡眠

解决方案 »

  1.   

    这个是我写的希望对你有帮助。package com.love;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    import com.love.R;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.TextView;public class Time extends Activity {
    private EditText EditText01;//EditText01������ʾ��ͬ������
    private EditText EditText02;//�������벻ͬ�IJ�����
    private TextView TextView01;//��ʾ��ǰʱ��
    private Button Button01;//��ʱ��İ�ť
    private Spinner Spinner_001;
    private Spinner Spinner_002;
    private Spinner Spinner_011;
    private Spinner Spinner_012;
    private EditText EditText_001;
    private EditText EditText_002;
    private CheckBox CheckBox01;//�Ƿ���ʱ���
    private boolean b1=false;//�Ƿ�������ʱ���
    private String time;//���ڵ�ǰʱ��
    private String s1 = "";//�����û������ʱ��
    private String s2 = "";//��ͬ����
    private Date d1;//��ǰʱ��
    private Map<String, String> dd = new HashMap<String, String>();//����ʱ���
    private Handler mHandler = new Handler() {//����ui
    public void handleMessage(Message msg) {//��ȡ��Ϣ�ж�����
    switch (msg.what) {
    case 1:
    updateTitle();
    break;
    }
    };
    }; @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    EditText01 = (EditText) findViewById(R.id.EditText01);
    EditText02 = (EditText) findViewById(R.id.EditText02);
    EditText_001 = (EditText) findViewById(R.id.EditText_001);
    EditText_002 = (EditText) findViewById(R.id.EditText_002);
    TextView01 = (TextView) findViewById(R.id.TextView01);
    Spinner_001=(Spinner)findViewById(R.id.Spinner_001);
    Spinner_002=(Spinner)findViewById(R.id.Spinner_002);
    Spinner_011=(Spinner)findViewById(R.id.Spinner_011);
    Spinner_012=(Spinner)findViewById(R.id.Spinner_012);
    CheckBox01=(CheckBox)findViewById(R.id.CheckBox01);
    Button01=(Button)findViewById(R.id.Button01);
    Button01.setOnClickListener(new ButtonListener());//�������
    new Thread(new myThread()).start();//�����߳�
    }
    class ButtonListener implements OnClickListener{

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    //�ж�������ʱ���û
    if(EditText02.getText()==null||EditText_001.getText()==null
    ||EditText_002.getText()==null){
    b1=true;
    }
    //���ʱ���Ͳ����ı���
    else{
    if(CheckBox01.isChecked()){
    s1=String.valueOf(Spinner_001.getSelectedItem())+"-"
    +String.valueOf(Spinner_002.getSelectedItem())+"-"
    +String.valueOf(Spinner_011.getSelectedItem())+" "
    +String.valueOf(Spinner_012.getSelectedItem())+":"
    +String.valueOf(EditText_001.getText())+":"
    +String.valueOf(EditText_002.getText());
    s2=String.valueOf(EditText02.getText());
    dd.put(s1, s2);
    s1="";
    s2="";

    }else
    //����ʱ��ĵĻ�ȡ
    {
    s1=String.valueOf(Spinner_001.getSelectedItem())+"-"
    +String.valueOf(Spinner_002.getSelectedItem())+"-"
    +String.valueOf(Spinner_011.getSelectedItem())+" "
    +String.valueOf(Spinner_012.getSelectedItem())+":"
    +String.valueOf(EditText_001.getText())+":"
    +String.valueOf(EditText_002.getText());
    s2=String.valueOf(EditText02.getText());
    }
    }
    }
    }
    class myThread implements Runnable {
    public void run() {
    while (true) {//�߳�1��˯��һ��ѭ��������Ϣ
    Message message = new Message();
    message.what = 1;
    mHandler.sendMessage(message);

    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    }
    }
    }
    }
    public void updateTitle() {
    d1 = new Date();//��ȡ��ǰʱ��ת����ʽ
    time = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(d1);
    TextView01.setText(time);//��ʾ��ǰʱ�������
    if(b1==true){//û��������ʱ�����ʾ
    EditText01.setText("ͬѧ����������");
    b1=false;
    }
    else{
    if(CheckBox01.isChecked()){
    Set<String> set = dd.keySet();
    for (String s : set) {//����map��ȡʱ�����в�ͬ�IJ���
    if (s.equals(time)) {
    if (dd.get(s).equals("eat")) {
    EditText01.setText("ͬѧ���"+dd.get(s)+"��Ŷ��");
    }
    if (dd.get(s).equals("xizao")) {
    EditText01.setText("ͬѧ���"+dd.get(s)+"��Ŷ��");
    }
    if (dd.get(s).equals("sleep")) {
    EditText01.setText("ͬѧ���"+dd.get(s)+"��Ŷ��");
    }
    }
    }
    }
    else{
    if (time.equals(s1)) { //����ʱ���IJ�����
    EditText01.setText("ͬѧ���"+s2+"��Ŷ��");
    }
    }
    }
    }
    }
      

  2.   

    http://zxandroid.javaeye.com/blog/419305
    简单的闹钟使用
      

  3.   

    能不能代码给我邮箱发份谢谢。[email protected]
      

  4.   

    学习,想到了前面的取得系统时间,没想到后面的不让cpu睡眠。
      

  5.   


    还算好吧,我在项目中也是设置为一分钟扫描一次。因为不能让cpu睡眠,所以耗电那是肯定的,这也没办法,那是现在的电池技术发展落后的原因。
      

  6.   

    楼上的回复没有一个沾边的,android有Alarm这个类,处理闹铃的到时候会自动执行你的程序的。
      

  7.   


        嘛,更正一点,原生的Android系统应该是没有Alarm这个类的(起码2.2版本的没有,之后的有没有我就不知道了)。DrSmart说的Alarm类其实在AlarmClock项目中(2.3以后项目名改为DeskClock),就是闹钟的那个项目。
        从AlarmClock项目中抽取Alarm和Alarms两个类可以让你自由的操作闹钟,你可以随意的添加,删除,修改闹钟,嘛的确能够实现正点报时的功能,不过那样界面就和闹钟一样了。
        为了区别开的话,你最好自己实现。使用android.app.AlarmManager这个类你可是比较轻松的实现这个整点报时的功能,利用AlarmManager.setRepeating可以设置一个间隔为1小时的重复闹钟,你就不需要去扫描系统时间了。
        实现一个receiver来接收AlarmManager发出的广播,然后准备一个activity(用于在界面上提醒),或者准备一个service(用户播放报时的音乐),当然最好是activity和service都写啦,这样你就可以获得AlarmClock一样效果。
        建议你看一下AlarmClock的源码,看懂这份源码以后,你会觉得整点报时的功能很简单。