首页 > 《第一行代码》中第八章短信接收器无法接收到系统的SMS广播

《第一行代码》中第八章短信接收器无法接收到系统的SMS广播

按照书里面所讲,建了一个内部类用于接受系统发出的SMS_RECEIVED广播。通过代码进行注册,并设置了最高优先级。同时模拟器里手动打开了应用的权限,允许接受短信。
但问题是onReceive方法怎么也执行不到,也就是说接收器压根就没收到广播,真机里也没法收到广播(Android5.1);
以下是代码:

package com.example.smstest;


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    
    private TextView sender;
    private TextView content;
    //private Button send_broad;
    
    private IntentFilter receiveFilter;
    private MessageReceiver messageReceiver;
    
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activiry_main);
        
        sender = (TextView) findViewById(R.id.sender);
        content =(TextView) findViewById(R.id.content);
        //send_broad=(Button) findViewById(R.id.broad);
        
        receiveFilter = new IntentFilter();
        receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
        //receiveFilter.addDataScheme("sms");
        receiveFilter.setPriority(1000);
        
        
        messageReceiver = new MessageReceiver();
        registerReceiver(messageReceiver, receiveFilter);
    }
    
    @Override
    protected void onDestroy(){
        super.onDestroy();
        unregisterReceiver(messageReceiver);
    }
    
    
    class MessageReceiver extends BroadcastReceiver{
        
        @Override
        public void onReceive(Context context, Intent intent){
            Log.d("fuck", "fuck!!!!");
            Toast.makeText(MainActivity.this, "You got a message", Toast.LENGTH_SHORT).show();
            Bundle bundle = intent.getExtras();
            Object[] pdus = (Object[]) bundle.get("pdus");
            SmsMessage messages = null;
            for (Object object : pdus){
                messages = SmsMessage.createFromPdu((byte[]) object, android.provider.Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
                
            }
            String address = messages.getOriginatingAddress();
            
            sender.setText(address);
            content.setText(messages);
        }
    }
}

提取短信内容的部分根据新的api有所不一样,但是不影响接受广播。

可以确定的是:Mainfest中声明过 android.permission.RECEIVE_SMS 权限;

        广播接收器已经注册过;
        应用的权限也打开了;
   但无论如何就是接受不到广播,百度无果,大都是说权限,有个说道看schema,尝试无果,优先级设为1000,尝试无果,难道是系统默认的短信应用拦截了这个广播?我想也不应该,系统默认应用有自己的广播为什么要拦截其他广播。苦思了一晚上没有结果,希望有大牛给解答,感激万分;
【热门文章】
【热门文章】