zoukankan      html  css  js  c++  java
  • 在子线程中发送短信,静态注册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);
        }
    }

  • 相关阅读:
    token认证、JWT
    DRF序列化、认证、跨域问题
    JS 作用域 p1
    如何配置图标
    关于批量更新与删除
    windows 公司内部搭建禅道(项目管控)
    JS 创建自定义对象的方式方法
    apicloud 消息推送与接收
    apicloud 自定义模块的开发与上架注意事项
    apicloud 第一篇
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3199768.html
Copyright © 2011-2022 走看看