我要做一个提醒类的应用,现在创建了一个服务WarnService
我怎么在这个服务里面实现:
查找数据库中所有设置的提醒时间,然后通过匹配手机当前时间发出铃声,震动,或者通知栏提醒呢?
我怎么在这个服务里面实现:
查找数据库中所有设置的提醒时间,然后通过匹配手机当前时间发出铃声,震动,或者通知栏提醒呢?
解决方案 »
- android入门——对话框(普通、列表带图标或普通列表、单选、多选)
- 关于布局的问题
- 点击ListView时ListView.setOnItemLongClickListener()消息不响应?
- httpclient.execute在wifi网络和cmnet网络下执行有什么区别
- Android新手 下载安装 失败
- 请教ListView能否实现监听
- SDK Manager.exe更新不了。。。
- 微信好友相册 批量下载 提供思路
- 怎样才能做到 像微信一样 表情框和键盘高度一样 软键盘和表情框切换自如?
- 创建新工程时没有创建MainActivity的窗口
- dialog显示时,activity会变暗,该怎样解决呢?
- android中播放视频 使用getNativeSurface FindClass 出错
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import stock.app.calendar.Alert;
import stock.app.calendar.R;
import stock.app.calendar.provider.ProviderData;import android.app.Service;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.media.AudioManager;
import android.media.SoundPool;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;public class CalendarService extends Service { /**
* list集合
*/
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
private int iListSize;
private String sRemindDate,sRemindTime,sTime;
private String sCurrentDate,sCurrentTime;
private String sNewDate,sNewTime;
private String sTitle;
private Handler handler = new Handler();
private CalendarContent content;
/**
* 播放提示声音
*/
private SoundPool sound;
/**
* 声音
*/
private int song;
public IBinder onBind(Intent arg0) {
return null;
}
public void onDestroy() {
super.onDestroy();
}
public void onStart(Intent intent, int startId) {
getCurrentTime();
list();
content = new CalendarContent(new Handler());
/**
* 注册数据库变化监听
*/
this.getContentResolver().registerContentObserver(Uri.parse("content://" + ProviderData.AUTHENTICATE + "/" + ProviderData.TB_CALENDAR), true, content);
handler.postDelayed(task, 1000);
sound = new SoundPool(10,AudioManager.STREAM_SYSTEM,5);
song = sound.load(CalendarService.this, R.raw.ringer,0);
super.onStart(intent, startId);
}
private Runnable task= new Runnable(){
public void run() {
try {
handler.postDelayed(task,1000);
getCurrentTime();
iListSize = list.size();
/**
* 格式化当前日期、时间
*/
final String currentTime = sCurrentDate + " " + sCurrentTime;
if(iListSize > 0){
for(int i = 0;i < iListSize;i ++){
/**
* 遍历for循环,如果当前日期、时间和设定的时间相等,就处理事件
*/
sRemindDate = list.get(i).get("new_date");
sRemindTime = list.get(i).get("new_time");
sTime = sRemindDate + " " + sRemindTime + ":00";
if(currentTime.equals(sTime)){
/**
* 开启一个服务,在服务中阻止键盘锁
*/
final Intent mService = new Intent(CalendarService.this,ScreenService.class);
mService.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(mService);
/**
* 跳转到对话框页面
*/
final Intent intent = new Intent(CalendarService.this,Alert.class);
final Bundle bundle = new Bundle();
bundle.putString("time", list.get(i).get("new_date") + " " + list.get(i).get("new_time"));
bundle.putString("title", list.get(i).get("title"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(bundle);
CalendarService.this.startActivity(intent);
Thread.sleep(1000);
stopService(mService);
content.onChange(true);
sound.play(song, 1, 1, 0, 0, 1);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
class CalendarContent extends ContentObserver{ public CalendarContent(Handler handler) {
super(handler);
} @Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
list();
}
}
public void list(){
try {
list.clear();
/**
* 查询tb_info表的大于当前时间的备忘数据
*/
Cursor cursor = getContentResolver().query(Uri.parse("content://" + ProviderData.AUTHENTICATE + "/" +
ProviderData.TB_CALENDAR), null, "type=? and (new_date>? or (new_date=? and new_time>?))",
new String[]{getString(R.string.beiwang),sCurrentDate,sCurrentDate,sCurrentTime.substring(0, sCurrentTime.lastIndexOf(":"))}, null);
/**
* 如果数据大于0,就将游标放在首位,开始遍历
*/
if(cursor.getCount() > 0){
cursor.moveToFirst();
/**
* 循环遍历,将所有的数据存放在list中
*/
do{
sNewDate = cursor.getString(cursor.getColumnIndex(ProviderData.NEW_DATE));
sNewTime = cursor.getString(cursor.getColumnIndex(ProviderData.NEW_TIME));
sTitle = cursor.getString(cursor.getColumnIndex(ProviderData.TITLE));
Map<String,String> map = new HashMap<String,String>();
map.put(ProviderData.NEW_DATE, sNewDate);
map.put(ProviderData.NEW_TIME, sNewTime);
map.put(ProviderData.TITLE, sTitle);
list.add(map);
}while(cursor.moveToNext());
}
cursor.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void getCurrentTime(){
/**
* 获取当前日期、时间
*/
final Calendar c = Calendar.getInstance();
final int iYear = c.get(Calendar.YEAR);
final int iMonth = c.get(Calendar.MONTH) + 1;
final int iayD = c.get(Calendar.DATE);
final int iHour = c.get(Calendar.HOUR_OF_DAY);
final int iMinute = c.get(Calendar.MINUTE);
final int iSecond = c.get(Calendar.SECOND);
sCurrentDate = iYear + "-" + format(iMonth) + "-" + format(iayD);
sCurrentTime = format(iHour) + ":" + format(iMinute) + ":" + format(iSecond);
}
/**
* 格式化时间
* @param x
* @return
*/
private String format(int x) {
String s = "" + x;
if (s.length() == 1) {
s = "0" + s;
}
return s;
}
}