Android appWidget——每日一句應用開發

來源:互聯網
上載者:User

        放假回家後著實無聊了點,剛好小米到手就學了下android開發,做點自己需要的應用,純Android新人,還請高手指點。

        學習加上開發這個widget前後算起來也快半個月了,目前已有一個比較完整的功能,不過還有待增加功能與代碼重構等,現在先放出這個版本與朋友們交流。

        、源碼與apk檔案放在最下面,有需要的朋友自行下載。

  這次做的主要一個功能是用appWidget展示一個英語、日語的每日一句,並可以發

音閱讀, 資料來源為滬江(本文僅為學習所用,任何人不得以本文及所含代碼用作

商業用途,違者責任自負)。

滬江已經有了一個每日一句的,但是是Activity,個人感覺麻煩,便做了個widget的。

其中使用到的包括:app widget的布局以及開發,廣播,sqlite資料庫,服務的使用,

以及滬江提供的每日一句服務等。

下面就遇到的些問題做個記錄以便以後有機會深入研究android再回來查看,有高手願

意解答也萬分感激。

1.appWidget的更新是通過接收廣播完成好還是通過AppWidgetManager在服務中

直接更新好

個人感覺服務僅僅用來做資料處理就行,處理完資料將結果廣播出去,誰要資料誰接收

便是,但不知道在服務中調用AppWidgetManager進行更新widget有無什麼好處?



2.intent的extras出現資料混亂的問題,最後改用data uri

這個問題不止一次出現,是bug問題還是我沒用好..應該是沒用好

大致問題就是,可以看到下面中有一個英語日語切換點擊,和一個上下翻頁的東

西,點擊事件Intent中帶extras都出現資料不對的問題

比如,英語註冊切換到英語的事件,日語註冊切換到日語的事件

都new出來的Intent放入PendingIntent.getService,都帶有不同的extras,但是第一次促發

英語事件以後即使以後促發日語的事件也傳的英語的資料,第一次促發日語事件以後也是

日語的,實在沒找出原因,跟進源碼跟到第一步就找不到源碼了...先記下來,以後再解決。

出現後弄了很久沒解決,只好去搜了下,有個老外也遇到類似的問題,改用data uri解決的

http://stackoverflow.com/questions/4064937/remoteviews-and-setonclickpendingintent

我也試了下,放在data uri後面都可以正確解析到



3.appWidget的textView滾動效果(如果開啟服務更新是否開銷過大)

因為一個頁面放不下太多內容,想弄個scroll,但是不支援額。。有說開個定時任務讓他自動

滾動,也可以開個服務更新,都是一個原理,而且要不停更新,不知道吃電量大不大,畢竟手

機上考慮的最起碼的吃電和流量。最後還是決定給個上下翻頁的按鈕了,見。



4.sqlite有無ORM架構

這個對象屬性一多,寫起DAO真麻煩,無論查詢還是插入,求個好用的架構。。。



5.appWidget的布局寬高問題

http://www.eoeandroid.com/sdk/api/guide/practices/ui_guidelines/widget_design.html

http://www.eoeandroid.com/sdk/api/guide/topics/appwidgets/index.html

看這兩篇guide吧 6種widget布局,做介面真心不會,這裡也不多說了。。看我那,好聽

點說乾淨樸實啊



6.appWidget啟動服務時,如果服務未結束時再啟動同一個服務,這兩個服務為同一個對

象 startId不同 可以利用

服務不結束再請求該服務都不會再建立對象了,好像eoe特刊裡面有一期提到了服務的生命周

期,只是掃了下沒仔細看,剛開始寫服務時不知道會使用同一個對象,都寫的私人成員,吃了

不少虧,這個地方代碼中還是用的私人成員,沒有改過來,先記下有時間再說。



7.分層問題 資料層中分頁資料時考慮了顯示寬度問題 服務層中考慮了appWidget更新

剛開始準備著手做這個東西時還各種層都考慮了怎麼分,雖然最後做出來的還是有階層,

比如service、資料以及顯示,但是功底不夠,一個不知道分的對不對,二個即使按照自己分的

是對的,在資料層還是參進去了介面(比如分頁顯示要根據字型寬度判斷,這個給寫在分頁的

資料層了- -),還有許多其他問題有待改進。


8.關於LocalBroadcastManager的使用

什麼作用查API吧,這裡記下我的問題,用LocalBroadcastManager發廣播時必須得註冊接收者

僅僅使用intent-filter貌似不起作用?

可以從SDK上的extras下找到android support package,maven庫上好像沒有android-support-v4.jar包。。


9.關於網路是否存在的判斷

網上大多都如下判斷網路是否存在,不知道是否有人驗證過是否一定準確

public static boolean checkInternet(Context paramContext){NetworkInfo localNetworkInfo = ((ConnectivityManager) paramContext.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();if (localNetworkInfo != null){boolean hasNet = localNetworkInfo.isAvailable();return hasNet;}return false;}

今天無聊測試了下用USB綁定電腦共用網路,用上面的方法是驗證無

網路,目前的android API貌似擷取不到USB共用網路的資訊...用java

API判斷是否能連上host也許可以吧,沒有嘗試


10.還有許多可以增加的功能和改進的地方

比如添加一個Activity讀取以前已更新過的資料,清除已更新下來的資料,下載時弄個進度條提

示等等,不一一列舉,有興趣在這代碼上修改的請隨意,如果可以,改完發我一份一起學習交

流~以後我有時間對這個代碼有功能改進也會在這裡更新

模擬器上的效果:

這個是APP WIDGET的添加介面

 初始狀態        

               點擊英語擷取到英語的當天資料

        點擊日語擷取到日語的當天資料,並做了分頁       

           現正播放發音


兩張小米上的:




        PS:由於本身寫給自己用的,介面上沒做太多,但是極力的在電量和流量的控制上做了許多工作,

比如服務的開關,下載後儲存到資料庫等,測試了下,一天的英語加日語加上對應的MP3耗流量106K,

如果不點擊播放不會下載MP3。下載沒有提示的,如果要使用的話這個地方也需要注意。

當天資料如果沒更新過,沒有網路時點擊沒有任何效果。然後目前的版本放到真機後,螢幕比電腦小多,

在一塊小地區內要放入很多元素,在點擊英語和日語時可能出現沒點擊到對應的textview導致沒有反應- - 

有待改進,自己拿去改也行。

源碼,eclipse工程:

http://download.csdn.net/detail/zhouyuqwert/4024341

單獨APK檔案:

http://download.csdn.net/detail/zhouyuqwert/4024342 其實源碼bin/下面有了


        修正1.修正一處,由於真機上點擊著實麻煩,範圍過小,

現在增加了點擊範圍,將選擇語言換成Activity透明背景選擇,現在在真機上

點擊所示地區都可,非常容易點擊到

修正1(點擊地區的修改).源碼。APK:

http://download.csdn.net/detail/zhouyuqwert/4024728


另外再記錄下關於maven的android工程,先前看有人在java區問到過,一起

在這裡聊下:maven庫裡面提供了三個工程,如下介紹,用介紹的建立工程後

eclipse:eclipse再匯入到eclipse用吧

https://github.com/akquinet/android-archetypes/wiki

部署也簡單,install 打包apk   android:redeploy卸載再部署  android:deploy部署

clean install android:redeploy一起用便是,自動重新部署上去了

http://mvnrepository.com/這裡是maven的所有庫,可以從這裡查詢你要的

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.