• 在子线程中发送短信,静态注册SentMsgReceiver。


    1. 应该在子线程中执行发送短信的操作。

    如果没有在子线程中发送短信会出现错误:点击发送短信之后,立即跳转到其他界面,那么这次发送短信可能就会失败!

    请注意往子线程方法中传入外部的实参必须由final修饰。

    private void performSendMessage(final String content) {
        if(content.length()==0) {
            Toast.makeText(mContext, "can't send a blank msg.", Toast.LENGTH_SHORT).show();
        } else {
            mEditMsg.setText("");
            final String[] numbers = mNumber.split(",");
            final Uri uri = Telephony.Sms.Outbox.addMessage(getContentResolver(), "13146491338", content,
                    null, System.currentTimeMillis(), false, mThreadId);
            onOutboxAddMessage(uri);
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    sendMessage(numbers[0], content, uri);
                }
            });
        }
    }

    2. 应该将SentMsgReceiver静态注册,而不是在短信列表界面中动态注册。

    如果在短信列表中动态注册,点击发送短信之后,立即跳转到其他界面,那么会执行onDestroy()方法,调用unRegisterReceiver()注销SentMsgReceiver。

    在com.txrj.sms.receiver包中新建SentMsgReceiver类(在SentMsgReceiver.java文件实现)

    public class SentMsgReceiver extends BroadcastReceiver {
        Context mContext;

        @Override
        public void onReceive(Context context, Intent intent) {
            mContext = context;
            Uri uri = intent.getParcelableExtra(TxrjConstant.EXTRA_SENT_URI);
            int resultCode = getResultCode();
            if(resultCode == Activity.RESULT_OK) {
                Toast.makeText(context, "send message success.", Toast.LENGTH_SHORT).show();
                updateMsgType(uri, Sms.MESSAGE_TYPE_SENT);
            } else if(resultCode == SmsManager.RESULT_ERROR_GENERIC_FAILURE) {
                Toast.makeText(context, "Generic failure.", Toast.LENGTH_SHORT).show();
                updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
            } else if(resultCode == SmsManager.RESULT_ERROR_NO_SERVICE) {
                Toast.makeText(context, "service is currently unavailable.", Toast.LENGTH_SHORT).show();
                updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
            } else if(resultCode == SmsManager.RESULT_ERROR_NULL_PDU) {
                Toast.makeText(context, "no pdu provided.", Toast.LENGTH_SHORT).show();
                updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
            } else if(resultCode == SmsManager.RESULT_ERROR_RADIO_OFF) {
                Toast.makeText(context, "radio was explicitly turned off.", Toast.LENGTH_SHORT).show();
                updateMsgType(uri, Sms.MESSAGE_TYPE_FAILED);
            }
        }
        private void updateMsgType(Uri uri, int type) {
            ContentValues values = new ContentValues();
            values.put(Sms.TYPE, type);
            mContext.getContentResolver().update(uri, values, null, null);
        }
    }

  • 相关阅读:
    上周热点回顾(11.2912.5)
    上周热点回顾(11.1511.21)
    上周热点回顾(11.2211.28)
    上周热点回顾(12.1312.19)
    Bambook程序达人赛报名公告
    HTML5技术专题上线啦!
    “博客无双,以文会友”活动公告
    上周热点回顾(12.612.12)
    [转]Java RMI之HelloWorld篇
    中国现代远程与继续教育网 统考 大学英语(B)考试大纲
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3199768.html
Copyright © 2020-2023  润新知