Activityhtml
public class NotificationActivity extends Activity { android
@Overridejson
protected void onCreate(Bundle savedInstanceState) {服務器
super.onCreate(savedInstanceState);app
setContentView(R.layout.activity_notification);ide
}this
public void open(View view) {url
Intent intent = new Intent(this, PushSmsService.class);xml
// 啓動服務htm
startService(intent);
}
public void close(View view) {
Intent intent = new Intent(this, PushSmsService.class);
// 中止服務
stopService(intent);
}
}
/**
*
* 短信推送服務類,在後臺長期運行,每一個一段時間就向服務器發送一次請求
*
* @author jerry
*
*/
public class PushSmsService extends Service {
private MyThread myThread;
private NotificationManager manager;
private Notification notification;
private PendingIntent pi;
private AsyncHttpClient client;
private boolean flag = true;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
System.out.println("oncreate()");
this.client = new AsyncHttpClient();
this.myThread = new MyThread();
this.myThread.start();
super.onCreate();
}
@Override
public void onDestroy() {
this.flag = false;
super.onDestroy();
}
private void notification(String content, String number, String date) {
// 獲取系統的通知管理器
manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notification = new Notification(R.drawable.ic_menu_compose, content,
System.currentTimeMillis());
notification.defaults = Notification.DEFAULT_ALL; // 使用默認設置,好比鈴聲、震動、閃燈
notification.flags = Notification.FLAG_AUTO_CANCEL; // 但用戶點擊消息後,消息自動在通知欄自動消失
notification.flags |= Notification.FLAG_NO_CLEAR;// 點擊通知欄的刪除,消息不會依然不會被刪除
Intent intent = new Intent(getApplicationContext(),
ContentActivity.class);
intent.putExtra("content", content);
intent.putExtra("number", number);
intent.putExtra("date", date);
pi = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
notification.setLatestEventInfo(getApplicationContext(), number
+ "發來短信", content, pi);
// 將消息推送到狀態欄
manager.notify(0, notification);
}
private class MyThread extends Thread {
@Override
public void run() {
String url = "http://110.65.99.66:8080/jerry/PushSmsServlet";
while (flag) {
System.out.println("發送請求");
try {
// 每一個10秒向服務器發送一次請求
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 採用get方式向服務器發送請求
client.get(url, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
try {
JSONObject result = new JSONObject(new String(
responseBody, "utf-8"));
int state = result.getInt("state");
// 假設偶數爲未讀消息
if (state % 2 == 0) {
String content = result.getString("content");
String date = result.getString("date");
String number = result.getString("number");
notification(content, number, date);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
Toast.makeText(getApplicationContext(), "數據請求失敗", 0)
.show();
}
});
}
}
}
}
ContentActivity
public class ContentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
Intent intent = getIntent();
TextView tv_content = (TextView) this.findViewById(R.id.tv_content);
TextView tv_number = (TextView) this.findViewById(R.id.tv_number);
TextView tv_date = (TextView) this.findViewById(R.id.tv_date);
if (intent != null) {
String content = intent.getStringExtra("content");
String number = intent.getStringExtra("number");
String date = intent.getStringExtra("date");
tv_content.setText("內容:" + content);
tv_number.setText("號碼:" + number);
tv_date.setText("日期:" + date);
}
}
}
Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.notification"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="cn.itcast.notification.NotificationActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ContentActivity"></activity>
<service android:name=".PushSmsService"></service>
</application>
</manifest>
服務器代碼
public class PushSmsServlet extends HttpServlet {
private static int index = 1;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(index);
// List<Sms> smsList = new ArrayList<Sms>();
Sms sms = new Sms(index,
"我愛你我愛你我愛你我愛你我愛你我愛你我愛你我愛你我愛你我愛你我愛你我愛你" + index, "2013-03-03",
"13522224444");
index++;
// smsList.add(sms);
// sms = new Sms(0, "我真的愛你", "2013-04-04", "13522224444");
// smsList.add(sms);
// sms = new Sms(1, "我真的真的愛你", "2013-05-05", "13522224444");
// smsList.add(sms);
response.setContentType("text/html");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
Gson gson = new Gson();
// 將Sms類的數據轉換爲json數據格式
String json = gson.toJson(sms);
out.write(json);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
實體類
public class Sms {
private int state;
private String content;
private String date;
private String number;
public Sms(int state, String content, String date, String number) {
super();
this.state = state;
this.content = content;
this.date = date;
this.number = number;
}
}