当前位置: 代码迷 >> Android >> Android service的有关问题
  详细解决方案

Android service的有关问题

热度:52   发布时间:2016-05-01 14:55:17.0
Android service的问题
我要做一个提醒类的应用,现在创建了一个服务WarnService
我怎么在这个服务里面实现:
查找数据库中所有设置的提醒时间,然后通过匹配手机当前时间发出铃声,震动,或者通知栏提醒呢?

------解决方案--------------------
注册一个开机广播,在开机广播中开打服务,然后查询数据库,进行时间的比对,并做相应的处理,楼主的逻辑很清楚啊,按照这个做下去就行了

参考代码:
Java code
package stock.app.calendar.service;import java.util.ArrayList;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;    }}
  相关解决方案