想要请问一下大家,如何在android的ril层实现短信pdu包的获取呢?是否需要在哪里注册一个回调函数进行获取呢?如果是需要注册回调,请问具体在哪里进行注册呢?非常感谢大家。

解决方案 »

  1.   

    android太新了
      

  2.   

    不知道你要实现什么功能,Android的短信不是直接可以用么?收到短信会在Log里面显示吧!你看看在哪里打印出来的
      

  3.   

    为什么非要在底层处理,BroadcastReceiver可以监听是否有新短信
      

  4.   

    以下是我自学时写的demo,希望对你有用
    /*
     *此类用于接收系统短信广播,并对短信进行解析
     */
    public class SMSReceiver extends BroadcastReceiver{ @Override
    public void onReceive(Context context, Intent intent) {
    System.out.println("---------------------receiver a message-------------------");
    //接收intent对象中的数据
    Bundle bundle = intent.getExtras();
    //在Bundle对象中有个属性名为  pdus  值是object数组
    Object[] myObjPdus = (Object[])bundle.get("pdus");
    //创建一个SmsMessage 类型的数组
    SmsMessage[] smsMessage = new SmsMessage[myObjPdus.length];
    System.out.println(smsMessage.length);
    for (int i = 0; i < myObjPdus.length; i++) {
    //使用Object数组中的对象创SmsMessaged对象
    smsMessage[i] = SmsMessage.createFromPdu((byte[])myObjPdus[i]);
    //调用SmsMessage 对象的getDisplayMessageBody()方法即可显示消息的内容
    System.out.println(smsMessage[i].getDisplayMessageBody());
    System.out.println("getMessageBody:  "+smsMessage[i].getMessageBody());
    }

    }
    }
    这是短信监听的权限申请,写配置文件中
     <!-- 短信监听权限申请 -->
        <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
    测试类,
    public class TestActivity extends Activity {

    //sms监听的action   
    private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";

    Button registerButton = null; 
    Button unregisterButton = null;
    SMSReceiver smsReceiver = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            registerButton = (Button)findViewById(R.id.register);
            unregisterButton = (Button)findViewById(R.id.unregister);
            
            registerButton.setOnClickListener(new RegisterListener());
            unregisterButton.setOnClickListener(new UnRegisterListener());
            
        }
        
        class RegisterListener implements OnClickListener{ @Override
    public void onClick(View v) {
    //生成一个BroadcastReceiver 对象
    smsReceiver = new SMSReceiver();
    //生成一个intentFilter对象 用于过滤广播
    IntentFilter intentFilter = new IntentFilter();
    //为internFilter添加过滤条件
    intentFilter.addAction(SMS_ACTION);
    //将BoardcastReceiver 对象注册到系统当中
    TestActivity.this.registerReceiver(smsReceiver, intentFilter);

    }
        
        }
        
        class UnRegisterListener implements OnClickListener{ @Override
    public void onClick(View v) {
    //解除绑定
    TestActivity.this.unregisterReceiver(smsReceiver);
    }
        }
        
    }