在Android上使用SMS_RECEIVED工作的最佳方式是什么?

时间:2014-05-19 14:14:04

标签: java android

我有一个使用BroadcastReceiver来处理传入SMS消息的工作应用程序。我的问题是什么是传入短信的最佳方式?目前我正在启动一个新的线程来完成这项工作,如下面的BroadcastReceiver的onReceive()方法所示。

@Override
public void onReceive(final Context ctx, Intent intent) {
    if(intent.getAction().equals(ANDROID_SMS_DELIVER)) {
        Bundle bundle = intent.getExtras();
        if (bundle != null){
            try{
                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage[] msgs = new SmsMessage[pdus.length];
                for(int i=0; i<msgs.length; i++){
                    msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                    final String smsFrom = msgs[i].getOriginatingAddress();
                    final String smsBody = msgs[i].getMessageBody();

                    // Launch a thread to do work on the SMS
                    new Thread() {
                        public void run() {
                            // Work..
                        }
                    }.start();
                }
            } catch(Exception e){}
        }
    }
}

这是最好的方法吗?或者,我应该向其他一些IntentService发送广播来完成这项工作,还是会这样做呢?

感谢。

1 个答案:

答案 0 :(得分:3)

这不是办法! BroadcastReceiver只能活10秒钟(给予或接受)。我不知道你的线程会发生什么。

最好的方法是使用IntentService。此Service是通过Intent启动/启动的,并在完成后自行关闭。