使用service在后台不断扫描系统时间,扫描到整点的就启动铃声播放,注意改变电源管理模式,不要让cpu睡眠
解决方案 »
- android上拉加载更多,下面的链接是要加载的数据json
- android ndk 支持windows?
- 将CM移植到C网手机上,遇到收短信“嘀嘀嘀”反复响的问题,请高手来帮解决,谢谢。
- 更新了eclipse的android插件,在运行以前工程的时候报错,大家帮我看看是怎么回事?
- 软键盘挡着输入框了 这个跟其他的有区别
- 如何将一个android工程利用ant做成jar包,该工程带有JNI,以供其它工程使用
- 短信列表如何让同一个号码的短信只显示一条,刚刚加载短信列表会加载所有的数据列。求指教
- 使用Eclipse创建AndroidAPP错误。
- FragmentTabHost 外接键盘输入editview 失去焦点
- 华为开发自己的手机系统,android程序员何去何从?
- 请教个关于ContentProvider的问题,谢谢!
- 求解:Preference 怎么手动销毁
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+"��Ŷ��");
}
}
}
}
}
简单的闹钟使用
还算好吧,我在项目中也是设置为一分钟扫描一次。因为不能让cpu睡眠,所以耗电那是肯定的,这也没办法,那是现在的电池技术发展落后的原因。
嘛,更正一点,原生的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的源码,看懂这份源码以后,你会觉得整点报时的功能很简单。