短信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.运行图

 

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

 

转载于:https://www.cnblogs.com/mercuryli/p/4506356.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值