基礎學習day07--broadcastReceiver

1 爲什麼需要廣播接收者(broadcastReceiver)

(1)老年人 
(2)出租車司機  
(3)寂寞的大學生  情感夜話  賣藥的 音樂臺 
(4)想聽廣播必須的有電臺   你在買一個收音機 安裝一塊電池  調到一個合適的頻道 
(5)Android系統內部相當於已經有一個電臺 定義了好多的廣播事件  比如外撥電話 短信到來 sd卡狀態  電池電量變化....
(6)谷歌工程師給我們定義了一個組件專門用來接收這些事件的 
(7)谷歌工程師爲什麼要設計這樣一個組件  目的就是爲了方便開發者進行開發 
(8)javase javaee javame 



2 廣播接收者案例_ip撥號器
  (1)定義一個類繼承BroadCastReceiver 
public class OutGoingCallReceiver extends BroadcastReceiver {
	//當接收到外撥電話的事件的時候回執行這個方法
	@Override
	public void onReceive(Context context, Intent intent) {
		//[0]獲取到我們保存的ip號碼 
		SharedPreferences sp = context.getSharedPreferences("config", 0);

		//[0.1]獲取我們保存的ip號碼
		String ipnumber = sp.getString("ipnumber", "");
		
		
		//[1]獲取當前我們要撥打的電話號碼 
		String currentNumber = getResultData();
		
		//[1.1]判斷撥打的電話是否是長途 
		if (currentNumber.startsWith("0")) {
			//[2]在當前的號碼前面加上一個17951 
			setResultData(ipnumber+currentNumber);
		}
		
		
		
		
		
		
	}
}


  (2)在清單文件裏面配置一下 
  1.  <!--配置廣播接收者   -->
            
            <receiver android:name="com.itheima.ipdail.OutGoingCallReceiver">
                <intent-filter >
                    <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
                </intent-filter>
     </receiver>

   (3)當我們配置的action 的事件發生了  onReceive方法就會執行 



3 廣播接收者案例_sd卡狀態監聽
(1)定義廣播接收者
  1. package com.itheima.sdcardstate;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    public class SdcardReceiver extends BroadcastReceiver {
    	//當sd卡被卸載 或者被掛載上來的時候 會執行
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		//[1]獲取到當前廣播的事件類型 
    		String action = intent.getAction();
    		//[2]對action做一個判斷 
    		if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){
    			System.out.println("說明sd卡 卸載了");
    			
    		}else if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {
    			
    			System.out.println("說明sd卡掛載了");
    		}
    		
    		
    		
    		
    	}
    }

(2)在清單文件配置一下 
 <receiver android:name="com.itheima.sdcardstate.SdcardReceiver">
            <intent-filter >
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                 <action android:name="android.intent.action."/>
                <!--想讓上面的這2個事件生效 必須的加上這樣的一個data   -->
                <data android:scheme="file"/>
            </intent-filter>
        </receiver>




4 廣播接收者案例_短信監聽器
  (1)定義廣播接收者
  1. package com.itheima.smslistener;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.telephony.SmsMessage;
    public class SmsListenerReceiver extends BroadcastReceiver {
    	//當短信到來的時候 就會執行這個方法
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		//[1]獲取發短信送的號碼  和內容 
    		Object[] objects = (Object[]) intent.getExtras().get("pdus");
    		for (Object pdu : objects) {
    			
    			//[2]獲取smsmessage實例 
    			SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
    			
    			//[3]獲取發送短信的內容 
    			String body = smsMessage.getMessageBody();
    			//[4]獲取發送者 
    			String address = smsMessage.getOriginatingAddress();
    			
    			System.out.println("body:"+body+"---"+address);
    			
    			//[5]比如發送短信 扣流量 
    			
    			
    		}
    		
    		
    		
    	}
    }

(2)在清單文件裏面註冊一下
  1.  <receiver android:name="com.itheima.smslistener.SmsListenerReceiver">
                <intent-filter >
                     <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                </intent-filter>
     </receiver>





5 不同版本廣播的特點
  (1)4.0之後的手機 谷歌爲了更加安全考慮  要求第一次安裝應用的時候必須有界面
  (2)在設置頁面有一個強行停止的按鈕 如果點擊了 廣播事件就不生效
  (3)在2.3的版本的手機沒有這樣的安全設計


6 廣播接收者案例_卸載安裝 
 09-08 03:26:15.926: E/AndroidRuntime(1152): java.lang.RuntimeException: Unable to start receiver com.itheima.bootreceiver.BootReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

    

7 廣播接收者案例_開機啓動

8 有序廣播和無序廣播
無序廣播:類似新聞聯播:廣播不可以被終止  數據不可以被修改 
有序廣播:類似中央發送的紅頭文件  按照優先級一級一級的接收 有序廣播可以被終止 數據可以被修改 


9 特殊廣播接收者
  比如操作特別頻繁的廣播事件 屏幕的鎖屏和解鎖 電池電量的變化 這樣的廣播接收者在清單文件裏面註冊無效
09-08 07:25:42.239: E/ActivityThread(2173): Activity com.itheima.screen.MainActivity has leaked IntentReceiver com.itheima.screen.ScreenReceiver@b6486088 that was originally registered here. Are you missing a call to
 unregisterReceiver()?


10 樣式和主題
   style  Theme 
   共同點:(1)定義的方式是一樣的 
   不同點:(1)style作用範圍比較窄 (控件 button textview)  theme 作用在activity或者Application節點下   



11 國際化 i18n 
小編 編輯  
國際化就是在res下創建對應國家環境目錄 values-en .....

12常見對話框
 (1)普通對話框
   
  1. //構建AlertDialog
    		AlertDialog.Builder builder = new Builder(this);
    		builder.setTitle("警告");
    		builder.setMessage("世界上最遙遠的距離是沒有網絡");
    		builder.setPositiveButton("確定", new OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    			
    				System.out.println("點擊了確定按鈕 執行的邏輯");
    				
    				
    			}
    		});
    		builder.setNegativeButton("取消", new OnClickListener() {
    			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    			
    				System.out.println("點擊了取消按鈕");
    			}
    		});
    		//最後一步一定要記得 show出來 
    		builder.show();
    		



 (2)單選對話框
 (3)多選對話框
 (4)進度條對話框

補充 2種上下文的區別
this:mainActivity 子類 
getApplicationContext(): 返回Context 父類
對話框不能用getApplicationContext();


13 Android中動畫 
(1)屬性動畫
(2)補間動畫 

(3)幀動畫 
   就是加載一系列的圖片資源  








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