Android in Practice筆記第二章

第二章

1. 給Application訪問網絡的權限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2. Android的權限
Android的每個權限Label保護相關的資源,在應用的manifest文件裏聲明的users-permission節點會在用戶安裝應用的時候提示給用戶,用戶確定之後表示這些相關的權限就授權給應用了。因此,應用程序在runtime是不做相關的檢查的。在應用程序中執行一個沒有授權的動作時,會拋出SecurityException的異常。
Android的權限定義在常量Manifest.permission類裏。
你也可以自定義自己的權限,然後給Intent,Activity,Service和Broadcase使用。
3. Resources
Resource包括圖片,國際化文字或者其他任意靜態值。
Resource定義在/res目錄下。
Resource可以在code裏或者xml裏訪問。
4. Resource的特點
每個Resource都有ID
每個Resource都有一個固定的類型
Resource有特殊的存放位置和文件
5. 在/res目錄下聲明的Resource不僅作爲你的應用程序的一部分被打包,而且也在程序裏被訪問。
一旦你定義一個resource在/res(除了/res/raw目錄下,該目錄下存放audio或者video文件等)目錄下,Android平臺會自動解析它,然後使用aapt工具去關聯一個ID到R上。
6. 爲什麼會有Resources
第一,隔離了代碼和外部資源,這樣就能保證代碼關注於應用以及整潔
第二,Resources高效並且快速的被訪問到,因爲XML被編譯成爲二進制格式
第三,Resources支持在運行時根據環境(比如語言,屏幕配置以及硬件能力等)來動態加載
7. Plurals資源(複數)
Plural是用來讓系統自動處理複數字符串的一類型特殊資源,這個主要用於處理英語里名詞的單數和複數用的。
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="deal_service_new_deal">
<item quantity="one">1 new deal!</item>
<item quantity="other">
<xliff:g id="count">%d</xliff:g>
new deals!
</item>
</plurals>
</resources>
注意:
1) xmlns:xliff是指定OASIS XLIFF XML format
2) 需要定義兩個item,一個one,另一個other。就是區分單數和複數的不同顯示
3) 在item節點裏可以使用String.format
4) 使用Resources.getQuantityString(R.plurals.deal_service_ new_deal, 1)來訪問Plurals資源。(這裏傳入的是1,也可以傳入其他數字)
8. 字符串資源放在/res/values目錄下
9. Assets
如果你需要普通訪問而不是被aapt處理過的文件,你就可以把文件放到/assets目錄下。任何放在/assets文件夾下的文件都可以被應用訪問。
10. Views and widgets
Android.view.View是所有視圖的基類。分爲三大類主要的Views:
1) SurfaceView:可以在其上通過drawing和graphics畫出界面
2) ViewGroup:對應於各種Layout以及Group容器
3) Widget:android.widget包下的各種Android提供的控件
11. Intents和IntentFilters
Intent描述你想做什麼操作,他不做任何實際的操作,僅僅描述什麼事情需要去做。
IntentFilter用於聲明Component處理哪些指定的Intent。
12. 發起分享Intent
Intent i = new Intent(Intent.ACTION_SEND);
i.setType(type);
i.putExtra(Intent.EXTRA_SUBJECT, "Subject:");
i.putExtra(Intent.EXTRA_TEXT,”abc”);
startActivity(Intent.createChooser(i, "Share deal ..."));

最後這一行代碼裏,通過Intent.createChooser(I,"Share deal …"))去創建了一個chooser,"Share deal …"會作爲共享界面的Title,並且會通過Chooser挑出符合該Intent的選項,並且不會出現選擇默認選項。如圖所示:


將上面的代碼改爲下面的之後:
startActivity(i);


13. Intent分類
1) 顯式的Intent(explicit),這個一般用在應用的內部,需要知道Component的具體名字以及類名。
2) 隱式的Intent(implicit),跟外部的應用聯繫時,使用隱式的。
隱式Intent通過action,data,type等屬性被平臺解析找到相應的能處理的組件。
14. Intent解析
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
這裏MAIN和LAUNCHER用於聲明Component能夠響應Home按鈕。
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
這個IntentFilter解析過程:
I. Action(SEND)
II. Category(DEFAULT),使用startActivity方法啓動一個隱式的Intent的時候,都會自動爲其加一個DEFAULT的category
III. Data
Android通過PackageManager去追蹤有哪些註冊的IntentFilter。當一個新應用安裝的時候,應用裏的IntentFilter就被加到PackageManager,被卸載的時候就刪除。
15. Application對象
Application對象有定義完善的生命週期,可以被用來存放應用的全局狀態。
Application對象會在應用程序進程創建的時候創建,不會跟Activity或者Service等Component的生命週期掛鉤
Application對象繼承Application類,裏面有onCreate方法
在Manifest文件裏使用android:name="你實現的Application類名"來給你的應用程序指定你自定製的Application對象:
<application android:icon="@drawable/ddicon"
android:label="@string/app_name"
android:name=".DealDroidApp">
16. ConnectivityManager
this.cMgr = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
ConnectivityManager是系統服務,可以通過它去檢查網絡狀態

17.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章