編輯:關於Android編程
嗯,其實需求很簡單,但是因為服務器不會主動聯系客戶端,所以客戶端必須不間斷的向服務器請求以便得到一些數據,突然不知道怎麼描述這個問題了,總之,我是通過AlarmManager來實現客戶端不斷地向服務器發送請求,好吧,往下。
客戶端不斷的發請求,然後通過獲得的響應做一些處理就可以了,流程就簡簡單單的像下面這個圖。
public class MyAlarmManager
{
//開啟輪詢服務
public static void startPollingService(Context context, int seconds, Class cls,String carUserId) {
//獲取AlarmManager系統服務
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Log.e("startPollingService:","開啟輪詢服務");
Intent intent = new Intent(context, cls);
intent.putExtra("carUserId",carUserId);//添加需要傳遞的一些參數
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);//我是用的是service
//使用AlarmManger的setRepeating方法設置定期執行的時間間隔(seconds秒)和需要執行的Service
manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), seconds * 1000, pendingIntent);
}
//停止輪詢服務
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);
//取消正在執行的服務
manager.cancel(pendingIntent);
}
}
我使用的是Service
/**
*輪詢服務
*使用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
大功告成
大家在開發的過程中可能會發現一些問題,比如
1.不間斷輪詢失敗
這裡一定要注意 manager.setRepeating()的參數,特別是第一個參數和第二個參數相對應,即關於鬧鈴的類型問題:
//一共有五種鬧鈴類型:
public static final int ELAPSED_REALTIME
//當系統進入睡眠狀態時,這種類型的鬧鈴不會喚醒系統。直到系統下次被喚醒才傳遞它,該鬧鈴所用的時間是相對時間,是從系統啟動後開始計時的,包括睡眠時間,可以通過調用SystemClock.elapsedRealtime()獲得。系統值是3 (0x00000003)。
public static final int ELAPSED_REALTIME_WAKEUP //能喚醒系統,用法同ELAPSED_REALTIME,系統值是2 (0x00000002)
ublic static final int RTC
//當系統進入睡眠狀態時,這種類型的鬧鈴不會喚醒系統。直到系統下次被喚醒才傳遞它,該鬧鈴所用的時間是絕對時間,所用時間是UTC時間,可以通過調用 System.currentTimeMillis()獲得。系統值是1 (0x00000001) 。
public static final int RTC_WAKEUP
//能喚醒系統,用法同RTC類型,系統值為 0 (0x00000000) 。
Public static final int POWER_OFF_WAKEUP
//能喚醒系統,它是一種關機鬧鈴,就是說設備在關機狀態下也可以喚醒系統,所以我們把它稱之為關機鬧鈴。使用方法同RTC類型,系統值為4(0x00000004)。
2.Notification不提示消息的問題
1).請設置icon
2).如果API是16請將getNotification()換成build()
前言在Android開發中,消息推送功能的使用非常常見。為了降低開發成本,使用第三方推送是現今較為流行的解決方案。今天,我將手把手教大家如何在你的應用裡集成小米推送目錄1
Android通過PackageManagerService(後面簡稱Pms)進行包管理,其主要功能包括:用戶ID分配、包解析、包的安裝卸載等。本文不對Pms進行分析,
(1)布局文件layout (2)需要彈出的Toast布局文件 (3)類的文件 package com
屬性動畫---res/animator屬性動畫故名思議就是通過動畫的方式改變對象的屬性了,我們首先需要了解幾個屬性:Duration動畫的持續時間,默認300ms。Tim