短信SMS的接收

近日,看了《第一行代码》有关短信接收的内容,就总结了一下。

1.手机接收到一条短信时,系统会发出一条android.provider.Telephy.SMS_RECEIVER的广播,这条广播带有短信的所有数据

2.首先定义xml文件

<LinearLayout 

        android:layout_width="match_parent"

        android:layout_height="50dp">

        

        <TextView 

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_gravity="center_vertical"

            android:padding="10dp"

            android:text="From:"/>

        

        <TextView 

            android:id="@+id/sender"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_gravity="center_vertical"/>

        </LinearLayout>

        

         <LinearLayout 

        android:layout_width="match_parent"

        android:layout_height="50dp">

        

        <TextView 

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_gravity="center_vertical"

            android:padding="10dp"

            android:text="Content:"/>

        <TextView 

            android:id="@+id/content"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_gravity="center_vertical"/>

2.MainActivity

public class MainActivity extends ActionBarActivity {

    

    private TextView sender;

    

    private TextView content;

    

    private IntentFilter receiverFilter;

    

    private MessageReceiver messageReceiver;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    

    sender=(TextView)findViewById(R.id.sender);

    content=(TextView)findViewById(R.id.content);

    

    receiverFilter = new IntentFilter();

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

    receiverFilter.setPriority(100);

    messageReceiver=new MessageReceiver();

    //第一个参数表示将要执行的方法,第二个表示接受的广播

    registerReceiver(messageReceiver, receiverFilter);

    }

    

    



    @Override

    protected void onDestroy() {

        super.onDestroy();

        //动态注册广播,要在ondestroy()方法中取消注册

        unregisterReceiver(messageReceiver);

    }







    class MessageReceiver extends BroadcastReceiver{



        @Override

        public void onReceive(Context context, Intent intent) {

            

            Bundle bundle=intent.getExtras();

            

            Object[] pdus=(Object[]) bundle.get("pdus");

            

            SmsMessage[] messages=new SmsMessage[pdus.length];

            

            for(int i=0;i<messages.length;i++){

                messages[i]=SmsMessage.createFromPdu((byte[]) pdus[i]);

            }

            //获取发送方号码

            String address = messages[0].getOriginatingAddress();

            String fullMessage="";

            for(SmsMessage message:messages){

                fullMessage +=message.getMessageBody(); //获取短信内容

            }

            sender.setText(address);

            content.setText(fullMessage);

            //abortBroadcast();

        }

        

    }

    

}

3.最后要在AndroidManifest.xml中声明权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

4.运行图

短信SMS的接收

短信SMS的接收

 

ps:这里的接受方式好像是API11之前的方法,现在已经不建议使用了

 

你可能感兴趣的:(sms)