Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 將學校擺在桌面上-實時更新校內數據的Android桌面部件,校內android

將學校擺在桌面上-實時更新校內數據的Android桌面部件,校內android

編輯:關於android開發

將學校擺在桌面上-實時更新校內數據的Android桌面部件,校內android


項目地址: https://github.com/hwding/AeolosXDUWidget

求支持(╭ ̄3 ̄)╭♡

本小白所在的學校雖身為某某電子科技大學, 但是網絡基礎設施實在是...用於查詢的各個網頁根本用的不是一套系統...也就是說, 如果你想很方便地獲取你的實驗成績\體育打卡次數\校內一卡通的流水情況和余額以及水電費的使用情況\圖書館借還信息等等, 你得登錄很多不同的網頁使用多套不同的系統輸入不同的賬戶與密碼...(不想吐槽某些系統居然還外包給另外一個某某電子科大...)

所以能不能用一種便捷的方法將重要的信息及時呈現和刷新呢?

根據這個需求給自己做了一個小部件放在手機桌面上, 真的很方便! 真的很方便! 真的很方便!

下面放兩張預覽圖

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 這個權限

 

緩存方法:

 1 public void getCaptcha(File file) throws IOException {
 2         URL url = new URL(HOST + CAPTCHA_SUFFIX);
 3         URLConnection urlConnection = url.openConnection();
 4         urlConnection.setRequestProperty("Cookie", "JSESSIONID="+JSESSIONID);
 5         urlConnection.connect();
 6         InputStream inputStream = urlConnection.getInputStream();
 7         byte[] bytes = new byte[1024];
 8         FileOutputStream fileOutputStream = new FileOutputStream(file);
 9         int LENGTH;
10         while ((LENGTH = inputStream.read(bytes)) != -1){
11             fileOutputStream.write(bytes, 0, LENGTH);
12         }
13         inputStream.close();
14         fileOutputStream.close();
15     }

 

設置頁面用於Download驗證碼的線程:

 1 package xdu.hwding.aeolosxdu;
 2 
 3 import android.os.Handler;
 4 import android.os.Message;
 5 import java.io.File;
 6 import java.io.IOException;
 7 import FooPackage.ECard;
 8 
 9 public class CaptchaLoaderThread extends Thread{
10     File file;
11     ECard eCard;
12     Handler handler;
13 
14     CaptchaLoaderThread(File file, Handler handler) throws IOException {
15         this.file = file;
16         this.handler = handler;
17     }
18 
19     public void run() {
20         try {
21             eCard = new ECard();
22             eCard.getCaptcha(file);
23             Message message = new Message();
24             message.obj = eCard;
25             handler.sendMessage(message);
26         } catch (IOException e) {
27             e.printStackTrace();
28         }
29     }
30 }

 

緩存成功後通知主線程通過BitMap方式顯示:

 1     Handler generateHandler(final ImageView imageView, final File file) {
 2         return new Handler() {
 3             @Override
 4             public void handleMessage(Message msg) {
 5                 Bitmap bitmap = BitmapFactory.decodeFile(String.valueOf(file));
 6                 imageView.setImageBitmap(bitmap);
 7                 findViewById(R.id.add_button).setEnabled(true);
 8                 findViewById(R.id.add_button).setOnClickListener(generateOnClickListener((ECard) msg.obj));
 9             }
10         };
11 }

 

關於HTML解析:

分析結果頁面抽取有效信息是最重要的部分, 程序歸根結底是一個爬蟲

JSoup無疑是第一選擇, 參見: Java中解析HTML數據 (利用第三方庫Jsoup)

這裡不做贅述

 

桌面部件(Widget)的更新周期:

創建桌面部件的時候AndroidStudio會自動生成一個XML配置文件, 裡面定義了部件的某些屬性

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <appwidget-provider
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:configure="xdu.hwding.aeolosxdu.NewAppWidgetConfigureActivity"
 5     android:initialKeyguardLayout="@layout/new_app_widget"
 6     android:initialLayout="@layout/new_app_widget"
 7     android:minHeight="215dp"
 8     android:minWidth="250dp"
 9     android:previewImage="@drawable/preview"
10     android:resizeMode="vertical"
11     android:updatePeriodMillis="1800000"
12     android:widgetCategory="home_screen">
13 </appwidget-provider>

 minHeight 和 minWidth 屬性分別定義了部件的最小尺寸

 resizeMode 定義可以縮放的方向

注意這裡最坑的來了!!!

沒有看過文檔的本小白天真的認為這裡可以讓 updatePeriodMillis 低至60000毫秒這樣就可以每分鐘刷新一次...

然而事實是最低更新周期也得半小時(1800000ms)...如果你想更短只能再跑一個線程然後用廣播通知什麼的

為了這個折騰好長時間的我知道真相眼淚掉下來...

  1. 上一頁:
  2. 下一頁:
Copyright © Android教程網 All Rights Reserved