1.使用UI工具:只須要把ui組件拖拽到佈局上便可
2.使用基本組件
BasicComponents項目清單文件java
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.basiccomponents" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.basiccomponents.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
Application元素定義了主活動
3.佈局文件包含LinerLayout元素,帶有三個字元素,兩個組件和一個按鈕
4.Toast:顯示一條信息做爲給客戶的反饋(不代替當前活動,只佔用一條消息的空間)
兩種重載形式都只接受一個字符
5.AlterDialog也是用戶反饋窗口,一個按鈕能夠連接到監聽器,單機該按鈕,出發監聽器。
6.通知:出如今狀態欄的一條消息和Toast不一樣,它是持久的,並將保持顯示。
7.PendingIntent:當用戶戳鞥通知會調用PendingIntent類的send方法。android
pendingIntent類
要獲得一個pendingIntent對象,使用方法類的靜態方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),getService(Context, int, Intent, int) 分別對應着Intent的3個行爲,跳轉到一個activity組件、打開一個廣播組件和打開一個服務組件。
參數有4個,比較重要的事第三個和第一個,其次是第四個和第二個。能夠看到,要獲得這個對象,必須傳入一個Intent做爲參數,必須有context做爲參數。
pendingIntent是一種特殊的Intent。主要的區別在於Intent的執行馬上的,而pendingIntent的執行不是馬上的。pendingIntent執行的操做實質上是參數傳進來的Intent的操做,可是使用pendingIntent的目的在於它所包含的Intent的操做的執行是須要知足某些條件的。
主要的使用的地方和例子:通知Notificatio的發送,短消息SmsManager的發送和警報器AlarmManager的執行等等。
Android的狀態欄通知(Notification)
若是須要查看消息,能夠拖動狀態欄到屏幕下方便可查看消息。
步驟:
1獲取通知管理器NotificationManager,它也是一個系統服務
2創建通知Notification notification = new Notification(icon, null, when);
3爲新通知設置參數(好比聲音,震動,燈光閃爍)
4把新通知添加到通知管理器
發送消息的代碼以下:git
//獲取通知管理器 NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE) int icon = android.R.drawable.stat_notify_chat; long when = System.currentTimeMillis();//通知發生的時間爲系統當前時間 //新建一個通知,指定其圖標和標題 Notification notification = new Notification(icon, null, when);//第一個參數爲圖標,第二個參數爲短暫提示標題,第三個爲通知時間 notification.defaults = Notification.DEFAULT_SOUND;//發出默認聲音 notification.flags |= Notification.FLAG_AUTO_CANCEL;//點擊通知後自動清除通知 Intent openintent = new Intent(this, OtherActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, openintent, 0);//當點擊消息時就會向系統發送openintent意圖 notification.setLatestEventInfo(this, 「標題」, 「我是內容", contentIntent); mNotificationManager.notify(0, notification);//第一個參數爲自定義的通知惟一標識
重點是setLatestEventInfo( )方法的最後一個參數!!!!它是一個PendingIntent!!!!!!!!!
這裏使用到了PendingIntent(pend本意是待定,不肯定的意思)
PendingIntent能夠看做是對Intent的包裝。PendingIntent主要持有的信息是它所包裝的Intent和當前Application的Context。正因爲PendingIntent中保存有當前Application的Context,使它賦予帶他程序一種執行的Intent的能力,就算在執行時當前Application已經不存在了,也能經過存在PendingIntent裏的Context照樣執行Intent。
PendingIntent的一個很好的例子:
SmsManager的用於發送短信的方法:
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
第一個參數:destinationAddress對方手機號碼
第二個參數:scAddress短信中心號碼通常設置爲空
第三個參數:text短信內容
第四個參數:sentIntent判斷短信是否發送成功,若是你沒有SIM卡,或者網絡中斷,則能夠經過這個itent來判斷。注意強調的是「發送」的動做是否成功。那麼至於對於對方是否收到,另當別論
第五個參數:deliveryIntent當短信發送到收件人時,會收到這個deliveryIntent。即強調了「發送」後的結果
就是說是在"短信發送成功"和"對方收到此短信"纔會激活 sentIntent和deliveryIntent這兩個Intent。這也至關因而延遲執行了Intent
上面兩個例子能夠理解,PendingIntent就是一個能夠在知足必定條件下執行的Intent,它相比於Intent的優點在於本身攜帶有Context對象,這樣他就沒必要依賴於某個activity才能夠存在。網絡
1.安卓中的一些佈局:app
GridLayout:將子視圖放置到一個柵格的一種佈局ide
1.要讓程序響應某一件事,須要爲該事件寫一個監聽器
|view中監聽器接口
| 接口 | 方法 |
|OnClickListener | onClick()|
|OnLongClickListner | OnLongClick()|
|OnFocusChangeListener| OnFocusChange()|
|OnKeyListener | OnKey()|
|OnTouchListener | OnTouch()|
2.MainActivity中的changecolor方法:當用戶按下時鐘時候,調用該方法並接受時鐘的對象,傳入一個顏色對象,還有一個計數器來指向color中的索引位置
3.實現一個監聽器函數
a. 系統通知欄setLatestEventInfo表示設置點擊該通知的事件工具
b. 短信系統舉例
短信系統舉例代碼佈局
private final static String SEND_ACTION = "send"; private final static String DELIVERED_ACTION = "delivered"; private void sendSms(String receiver, String text) { SmsManager s = SmsManager.getDefault(); PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SEND_ACTION), PendingIntent.FLAG_CANCEL_CURRENT); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED_ACTION), PendingIntent.FLAG_CANCEL_CURRENT); // 發送完成 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "Send Success!", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Send Failed because generic failure cause.", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "Send Failed because service is currently unavailable.", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), "Send Failed because no pdu provided.", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Send Failed because radio was explicitly turned off.", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(getBaseContext(), "Send Failed.", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SEND_ACTION)); // 對方接受完成 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "Delivered Success!", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(getBaseContext(), "Delivered Failed!", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED_ACTION)); // 發送短信,sentPI和deliveredPI將分別在短信發送成功和對方接受成功時被廣播 s.sendTextMessage(receiver, null, text, sentPI, deliveredPI); }
以上的兩個PendingIntent sentPI和deliveredPI將分別在短信發送成功和對方接受成功時被廣播
三、Intent和PendingIntent的區別學習
a. Intent是當即使用的,而PendingIntent能夠等到事件發生後觸發,PendingIntent能夠cancel
b. Intent在程序結束後即終止,而PendingIntent在程序結束後依然有效
c. PendingIntent自帶Context,而Intent須要在某個Context內運行
d. Intent在原task中運行,PendingIntent在新的task中運行
PendingIntent用於描述Intent及其最終的行爲.
你能夠經過getActivity(Context context, int requestCode, Intent intent, int flags)系列方法從系統取得一個用於啓動一個Activity的PendingIntent對象,
能夠經過getService(Context context, int requestCode, Intent intent, int flags)方法從系統取得一個用於啓動一個Service的PendingIntent對象
能夠經過getBroadcast(Context context, int requestCode, Intent intent, int flags)方法從系統取得一個用於向BroadcastReceiver的Intent廣播的PendingIntent對象
返回的PendingIntent能夠遞交給別的應用程序,而後繼續處理。這裏的話你能夠稍後才處理PendingIntent中描述的Intent及其最終行爲。
當你把PendingIntent遞交給別的程序進行處理時,PendingIntent仍然擁有PendingIntent原程序所擁有的權限(with the same permissions and identity).當你從系統取得一個PendingIntent時,必定要很是當心才行。好比,一般,若是Intent目的地是你本身的component(Activity/Service/BroadcastReceiver)的話,你最好採用在Intent中顯示指定目的component名字的方式,以確保Intent最終能發到目的,不然Intent最後可能不知道發到哪裏了。一個PendingIntent就是Android系統中的一個token(節點,這個應該是Linux或C\C++用語)的一個對象引用,它描述了一些將用於retrieve的數據(這裏,這些數據描述了Intent及其最終的行爲)。
這就意味着即便PendingIntent原進程結束了的話, PendingIntent自己仍然還存在,可在其餘進程(PendingIntent被遞交到的其餘程序)中繼續使用.若是我在從系統中提取一個PendingIntent的,而系統中有一個和你描述的PendingIntent對等的PendingInent, 那麼系統會直接返回和該PendingIntent實際上是同一token的PendingIntent,而不是一個新的token和PendingIntent。然而你在從提取PendingIntent時,經過FLAG_CANCEL_CURRENT參數,讓這個老PendingIntent的先cancel()掉,這樣獲得的pendingInten和其token的就是新的了。
經過FLAG_UPDATE_CURRENT參數的話,可讓新的Intent會更新以前PendingIntent中的Intent對象數據,例如更新Intent中的Extras。另外,咱們也能夠在PendingIntent的原進程中調用PendingIntent的cancel ()把其從系統中移除掉。
運行statistic腳本文件顯示學習狀況,以下:
開發AndoridSDK。AVA一編你可以測試本身應用程序需不須要物理設備
教材學習 | 視頻學習 | 博客量(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 12章 | 20篇 | ||
第七週 | 第2三、2四、25章 | 《java和android開發學習指南》 | 1/1 | 學會使用UI組件佈局和監聽器使用 |