編輯:關於Android編程
之前曾介紹過Android的UI設計與後台線程交互,據Android API的介紹,service一般是在後台運行的,沒有界面的。那麼如何實現service動態更新UI界面呢?
案例:通過service向遠程服務器發送請求,根據服務器返回的結果動態更新主程序UI界面,主程序可實時關閉或重啟服務。
注冊BroadcastReceiver
在主程序activity中注冊一個BroadcastReceiver,用於接收Service發布的廣播。
@Override protected void onStart() {// 重寫onStart方法 dataReceiver = new DataReceiver(); IntentFilter filter = new IntentFilter();// 創建IntentFilter對象 filter.addAction("com.szy.ui.service"); registerReceiver(dataReceiver, filter);// 注冊Broadcast Receiver super.onStart(); }
停止service命令
主程序activity可發布廣播,用於向後台service傳遞數據或控制信息,如停止service命令。
btnStop.setOnClickListener(new OnClickListener() { //為按鈕添加點擊事件監聽 @Override public void onClick(View v) {//重寫onClick方法 Intent myIntent = new Intent();//創建Intent對象 myIntent.setAction("com.szy.ui.service"); myIntent.putExtra("cmd", CMD_STOP_SERVICE); sendBroadcast(myIntent);//發送廣播 } });
接收廣播
後台service注冊BroadCastReceiver用於接受主程序發送的廣播
@Override public int onStartCommand(Intent intent, int flags, int startId) {// 重寫onStartCommand方法 IntentFilter filter = new IntentFilter();// 創建IntentFilter對象 filter.addAction("com.szy.ui.service"); registerReceiver(cmdReceiver, filter);// 注冊Broadcast Receiver doJob();// 調用方法啟動線程,自己來完成 return super.onStartCommand(intent, flags, startId); }
實時發送
後台service在doJob()方法中連接服務器並向主程序實時發送廣播。
/** * 啟動一個子純種並連接服務器,接收服務器返回數據data。代碼略。。。 */ Object data;//服務器返回的數據data Intent intent = new Intent();//創建Intent對象 intent.setAction("com.szy.ui.service"); intent.putExtra("data", data); sendBroadcast(intent);//發送廣播
至此,我們實現了主程序通過接收廣播實時更新應用的UI界面。
圓角按鈕,或布局可以在xml文件中實現,但也可以使用圖片直接達到所需的效果,以前版本的微信就使用了這種方法。 實現效果圖: 不得不說,這種做法還是比較方便的。 源
就是仿照現在掃一掃的形式,周圍是半透明的遮擋,然後中間是全透明的,拍攝後只截取框內的內容查了很多博客,實現起來真的太復雜了,本人比較怕麻煩所以在很多地方偷懶了先上效果圖:
Android應用檢查版本更新後,在通知欄下載,更新下載進度,下載完成自動安裝,效果圖如下:•檢查當前版本號AndroidManifest文件中的versio
如果做一個如下圖的Dialog,首先要定義樣式: stateUnchanged|adjustResize @null @null