日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > Android開發(fā):利用AlarmManager不間斷向服務(wù)器發(fā)送請求以及notification通知

Android開發(fā):利用AlarmManager不間斷向服務(wù)器發(fā)送請求以及notification通知

來源:程序員人生   發(fā)布時間:2016-06-07 17:30:15 閱讀次數(shù):2968次

1.前言

嗯,其實需求很簡單,但是由于服務(wù)器不會主動聯(lián)系客戶端,所以客戶端必須不中斷的向服務(wù)器要求以便得到1些數(shù)據(jù),突然不知道怎樣描寫這個問題了,總之,我是通過AlarmManager來實現(xiàn)客戶端不斷地向服務(wù)器發(fā)送要求,好吧,往下。

2.實現(xiàn)

客戶端不斷的發(fā)要求,然后通過取得的響應(yīng)做1些處理就能夠了,流程就簡簡單單的像下面這個圖。
這里寫圖片描述

第1步:利用AlarmManager開啟輪詢服務(wù)

public class MyAlarmManager { //開啟輪詢服務(wù) public static void startPollingService(Context context, int seconds, Class<?> cls,String carUserId) { //獲得AlarmManager系統(tǒng)服務(wù) AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Log.e("startPollingService:","開啟輪詢服務(wù)"); Intent intent = new Intent(context, cls); intent.putExtra("carUserId",carUserId);//添加需要傳遞的1些參數(shù) PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);//我是用的是service //使用AlarmManger的setRepeating方法設(shè)置定期履行的時間間隔(seconds秒)和需要履行的Service manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), seconds * 1000, pendingIntent); } //停止輪詢服務(wù) public static void stopPollingService(Context context, Class<?> cls,String action) { AlarmManager manager = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, cls); intent.setAction(action); PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); //取消正在履行的服務(wù) manager.cancel(pendingIntent); } }

第2步:Service/BroadcastReceiver/Activity完成相應(yīng)的要求

我使用的是Service

/** *輪詢服務(wù) *使用notification彈出消息 */ public class QueryUnusualService extends Service { private Notification notification; private NotificationManager manager; private Handler handler; @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return null; } @Override public void onCreate() { super.onCreate(); handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case R.id.query_unusual_car_result: List<Map<String,Object>> unusualCarList = (List<Map<String,Object>>)msg.getData().getSerializable("unusualCarList"); if(unusualCarList==null||unusualCarList.size()<1) return; showNotification(unusualCarList); break; default: break; } } }; } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); //要求數(shù)據(jù) CarController.queryUnusualCar(intent.getStringExtra("carUserId"), handler); } //彈出Notification private void showNotification(List<Map<String,Object>> unusualCarList) { final Bitmap largeIcon = ((BitmapDrawable) getResources().getDrawable(R.drawable.stefan)).getBitmap(); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0, new Intent().setAction("intvehapp.intvehapp.Activity.BaiDuMapActivity"), 0); notification = new Notification.Builder(this) .setSmallIcon(R.drawable.head_image) .setLargeIcon(largeIcon) .setTicker("新消息!!") .setContentTitle("新消息!!!!") .setContentText("新消息~") .setContentIntent(pendingIntent3).setNumber(1).getNotification(); // 需要注意build()是在API // level16及以后增加的,API11可使用getNotificatin()來替換 notification.flags |= Notification.FLAG_AUTO_CANCEL; // FL manager.notify(1, notification); } @Override public void onDestroy() { super.onDestroy(); System.out.println("Service:onDestroy"); } }

大功告成

3.問題

大家在開發(fā)的進程中可能會發(fā)現(xiàn)1些問題,比如
1.不中斷輪詢失敗
這里1定要注意 manager.setRepeating()的參數(shù),特別是第1個參數(shù)和第2個參數(shù)相對應(yīng),即關(guān)于鬧鈴的類型問題:

//1共有5種鬧鈴類型: public static final int ELAPSED_REALTIME //當(dāng)系統(tǒng)進入眠眠狀態(tài)時,這類類型的鬧鈴不會喚醒系統(tǒng)。直到系統(tǒng)下次被喚醒才傳遞它,該鬧鈴所用的時間是相對時間,是從系統(tǒng)啟動后開始計時的,包括睡眠時間,可以通過調(diào)用SystemClock.elapsedRealtime()取得。系統(tǒng)值是3 (0x00000003)。 public static final int ELAPSED_REALTIME_WAKEUP //能喚醒系統(tǒng),用法同ELAPSED_REALTIME,系統(tǒng)值是2 (0x00000002) ublic static final int RTC //當(dāng)系統(tǒng)進入眠眠狀態(tài)時,這類類型的鬧鈴不會喚醒系統(tǒng)。直到系統(tǒng)下次被喚醒才傳遞它,該鬧鈴所用的時間是絕對時間,所用時間是UTC時間,可以通過調(diào)用 System.currentTimeMillis()取得。系統(tǒng)值是1 (0x00000001) 。 public static final int RTC_WAKEUP //能喚醒系統(tǒng),用法同RTC類型,系統(tǒng)值為 0 (0x00000000) 。 Public static final int POWER_OFF_WAKEUP //能喚醒系統(tǒng),它是1種關(guān)機鬧鈴,就是說裝備在關(guān)機狀態(tài)下也能夠喚醒系統(tǒng),所以我們把它稱之為關(guān)機鬧鈴。使用方法同RTC類型,系統(tǒng)值為4(0x00000004)。

2.Notification不提示消息的問題
1).請設(shè)置icon
2).如果API是16請將getNotification()換成build()

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 在线国产区 | 成人黄色免费观看 | 国产精品va | 玖玖在线 | 亚洲视频二区 | 91丨九色丨尤物 | 成人爽a毛片一区二区免费 中文在线视频观看 | 精品在线免费观看 | 国产精品久久久久久 | 精品久久久国产 | 麻豆日韩| 久久久夜夜夜 | 免费日韩一区二区 | 欧美一区二区三区免费观看 | 久久精品成人 | 人人九九精| 福利电影在线播放 | 国产精品网站在线观看 | 天天操夜夜看 | 欧美不卡一区二区三区 | 日韩精品一区二区在线 | 国产91一区二区三区 | 日韩欧美一 | 一区二区免费 | 亚洲成人精品在线 | 欧美一区二区三区在线观看视频 | 福利视频久久 | 久久精品国产免费 | 精品一区中文字幕 | aaa日本高清在线播放免费观看 | 91精品国产综合久久久久久久久 | 国产精品一区二区三区久久 | 中文字幕在线二区 | 午夜综合| 美女又爽又黄视频 | 欧美日韩在线视频免费 | 免费人成在线观看网站 | 三级电影网址 | 国产成人精品视频 | 久久亚洲美女 | 一区二区不卡 |