熟女伦乱激情网一区二区,十八禁免费漫画在线观看,欲色欲香天天网综合久久,美女无遮挡隐私叼嗨网站

當(dāng)系統(tǒng)收到短信時(shí),會(huì)發(fā)出一個(gè)action名稱為android.provier.Telephony.SMS_RECEIVED的廣播Intent,該Intent存放了接收到的短信內(nèi)容,使用名稱 “pdus”即可從Intent中獲取短信內(nèi)容。

pdus是一個(gè)object類型的數(shù)組,每一個(gè)object都是一個(gè)byte[]字節(jié)數(shù)組,每一項(xiàng)為一條短信。

Object[] pduses= (Object[])intent.getExtras().get("pdus");

       for(Objectpdus: pduses){

           byte[] pdusmessage = (byte[])pdus;

           SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);

           String mobile = sms.getOriginatingAddress();//發(fā)送短信的手機(jī)號(hào)碼

           String content = sms.getMessageBody(); //短信內(nèi)容

           Date date = new Date(sms.getTimestampMillis());

           SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           String time = format.format(date);  //得到發(fā)送時(shí)間

          

       }

 

廣播接收者(BroadcastReceiver)用于接收廣播Intent,廣播Intent的發(fā)送是通過(guò)調(diào)用 Context.sendBroadcast()、Context.sendOrdeedBroadcast()、 context.sendStickyBroadcast()來(lái)實(shí)現(xiàn)的,通常一個(gè)廣播Intent可以被訂閱了此Intent的多個(gè)廣播接收者所接收,這 個(gè)特性跟JMS中的Topic消息接收者類似,要實(shí)現(xiàn)一個(gè)廣播接收者方法如下:

第一步,繼承BroadcastReceiver,并重寫onReceive()方法

public class SMSBroadcastReceiver extends BroadcastReceiver{

    @Override

    public void onReceive(Context context, Intent intent) {

      

    }

}

onReceive的生命周期為10秒,所以里面的操作不能超過(guò)10秒

 

第二步,訂閱感興趣的廣播Intent,訂閱方法有兩種:

       第一種:使用代碼進(jìn)行訂閱

SMSBroadcastReceiver receiver = new SMSBroadcastReceiver();

IntentFilter filter = new IntentFilter();

       filter.addAction("android.provider.Telephony.SMS_RECEIVED");

       context.registerReceiver(receiver,filter);

       第二種:在AndroidManifest.xml文件中的節(jié)點(diǎn)里進(jìn)行訂閱

".SMSBroadcastReceiver">

          

              "android.provider.Telephony.SMS_RECEIVED"/>

          

      

 

第三步,增加接收短信權(quán)限

"android.permission.RECEIVE_SMS">

 

 

 

廣播被分為兩種不同的類型,“普通廣播(Normal broadcasts)”和“有序廣播(Ordered broadcasts)”。普通廣播是完全異步的,可以在同一時(shí)刻(邏輯上)被所有接收者接收到,消息傳遞的效率比較高,但缺點(diǎn)是:接收者不能將處理結(jié)果 傳遞給下一個(gè)接收者,并且無(wú)法終止廣播Intent的傳播;然而有序廣播是按照接收者聲明的優(yōu)先級(jí)別(聲明在intent-filter元素的 android:priority屬性中,數(shù)據(jù)大優(yōu)先級(jí)別越高,取值范圍:-1000到1000也可以調(diào)用IntentFilter對(duì)象的 setPriority()進(jìn)行設(shè)置),被接收者依次接收廣播。如:A的級(jí)別高于B,B的級(jí)別高于C,那么,廣播先傳給A,再傳給B,最后傳給C。A得到 廣播后,可以往廣播里存入數(shù)據(jù),當(dāng)廣播傳給B時(shí),B可以從廣播中得到A存入的數(shù)據(jù)。

 

Context.sendBroadcast()發(fā)送的是普通廣播,所有訂閱者都有機(jī)會(huì)獲得并進(jìn)行處理。

Context.sendOrderedBroadcast()發(fā)送的是有序廣播,系統(tǒng)會(huì)根據(jù)接收者聲明的優(yōu)先級(jí)別按順序逐個(gè)執(zhí)行接收者,前面的接收者有 權(quán)終止廣播(BroadcastReceiver.abortBroadcast() ),如果廣播被前面的接收者終止,后面的接收者就再也無(wú)法獲取到廣播。對(duì)于有序廣播,前面的接收者可以將處理結(jié)果存進(jìn)廣播Intent,然后傳給下一個(gè)接 收者。

sendStickyBroadcast() 意思只要是如果發(fā)送廣播之后才執(zhí)行registerReceiver(BroadcastReceiver,IntentFilter).這個(gè)方法依然可 以接受到。換句話說(shuō),在ReceiverActivity里是通過(guò)代碼來(lái)注冊(cè)Recevier而不是在Manifest里面注冊(cè)的。 sendStickyBroadcast發(fā)出的最后一個(gè)Intent會(huì)被保留,當(dāng)下次Recevier處于活躍的時(shí)候,又會(huì)接受到它。需要加 BROADCAST_STICKY權(quán)限,否則會(huì)拋SecurityException

 

接收電池電量變化廣播:

"android.intent.action.BATTERY_CHANGED"/>

 

接收開(kāi)機(jī)啟動(dòng)廣播

"android.intent.action.BOOT_COMPLETED"/>

并在進(jìn)行權(quán)限聲明

 

 

在Android中,程序的響應(yīng)(Responsive)被活動(dòng)管理器(Activity Manager)和窗口管理器(Window Manager)這兩個(gè)系統(tǒng)服務(wù)所監(jiān)視,當(dāng)BroadcastReceiver在10秒內(nèi)沒(méi)有執(zhí)行完畢,Android會(huì)認(rèn)為該程序無(wú)響應(yīng),所以在 BroadcastReceiver里不能做一些比較耗時(shí)的操作,否則會(huì)彈出ANR(Application No Response)的對(duì)話框。如果需要完成一項(xiàng)比較耗時(shí)的工作,應(yīng)該通過(guò)發(fā)送Intent給Service,由Service來(lái)完成,而不是使用子線程的 方法來(lái)解決,因?yàn)锽roadcastReceiver的生命周期很短(在onReceive()執(zhí)行后BroadcastReceiver的實(shí)例就會(huì)被銷 毀),子線程可能還沒(méi)有結(jié)束B(niǎo)roadcastReceiver就先結(jié)束了。如果BroadcastReceiver結(jié)束了,它的宿主進(jìn)程還在運(yùn)行,那么 子線程還會(huì)繼續(xù)執(zhí)行。但宿主進(jìn)程此時(shí)很容易在系統(tǒng)需要內(nèi)在時(shí)被優(yōu)先殺死。因?yàn)樗鼘儆诳者M(jìn)程(沒(méi)有任何活動(dòng)組件的進(jìn)程)。

每次廣播消息到來(lái)時(shí),都會(huì)創(chuàng)建BroadcastReceiver實(shí)例來(lái)執(zhí)行onReceive()方法。

 

事例:

 

[java] view plaincopy

  1. package com.king.sms;  

  2.   

  3. import java.text.SimpleDateFormat;  

  4. import java.util.Date;  

  5.   

  6. import android.content.BroadcastReceiver;  

  7. import android.content.Context;  

  8. import android.content.Intent;  

  9. import android.telephony.SmsMessage;  

  10.   

  11.   

  12.   

  13. public class SMSBroadcastReceiver extends BroadcastReceiver{  

  14.   

  15.     @Override  

  16.     public void onReceive(Context context, Intent intent) {  

  17.         Object[] pduses= (Object[])intent.getExtras().get("pdus");  

  18.         for(Object pdus: pduses){  

  19.             byte[] pdusmessage = (byte[])pdus;  

  20.             SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);  

  21.             String mobile = sms.getOriginatingAddress();//發(fā)送短信的手機(jī)號(hào)碼  

  22.             String content = sms.getMessageBody(); //短信內(nèi)容  

  23.             Date date = new Date(sms.getTimestampMillis());  

  24.             SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

  25.             String time = format.format(date);  //得到發(fā)送時(shí)間  

  26.               

  27.         }  

  28.     }  

  29.   

  30. }  


 

//    AndroidManifest.xml

 

 

[java] view plaincopy

  1. "1.0" encoding="utf-8"?>  

  2. "http://schemas.android.com/apk/res/android"  

  3.       package="com.king.sms"  

  4.       android:versionCode="1"  

  5.       android:versionName="1.0">  

  6.     "8" />  

  7.     "color:#ff0000;">"android.permission.RECEIVE_SMS">  

  8.   

  9.     "@drawable/icon" android:label="@string/app_name">  

  10.         ".SMSBroadcastReceiver">  

  11.               

  12.                 "android.provider.Telephony.SMS_RECEIVED"/>  

  13.               

  14.           

  15.   

  16.       

  17.  

 

 

穩(wěn)定

產(chǎn)品高可用性高并發(fā)

貼心

項(xiàng)目群及時(shí)溝通

專業(yè)

產(chǎn)品經(jīng)理1v1支持

快速

MVP模式小步快跑

承諾

我們選擇聲譽(yù)

堅(jiān)持

10年專注高端品質(zhì)開(kāi)發(fā)
  • 返回頂部
台东市| 永胜县| 罗江县| 泰兴市| 嘉黎县| 彩票| 观塘区| 栖霞市| 汝阳县| 靖边县| 镇巴县| 阳西县| 阳江市| 三明市| 含山县| 兴城市| 陇西县| 纳雍县| 沈阳市| 宜昌市| 玛纳斯县| 海南省| 深水埗区| 博野县| 许昌市| 伊宁市| 肇东市| 惠东县| 华宁县| 西丰县| 任丘市| 民丰县| 南开区| 拉孜县| 炉霍县| 泰安市| 孟连| 威远县| 牙克石市| 南康市| 陈巴尔虎旗|