Android 接收短信
来源:互联网 发布:浙江软件考试成绩查询 编辑:程序博客网 时间:2024/05/20 04:09
1.短信接收的思路
1.通过广播接收器接收短信广播进行解析,获取短信内容;
- 这种方式只对新收到的短消息有效,并不会读取收件箱中已读或未读的消息,只有当收到新来的短消息时,才会在广播接收器的onReceive中收到.
- 有一个问题是这个短信广播是系统的广播,而且是有序广播;存在被别的应用截断的危险.
当然我们可以通过设置高优先级priority,让我们的应用优先收,但是其实有时是不管用的,现在在一些定制的系统或是有安全软件的情况下,往往短消息都被截取到,并被干掉。
public class SmsReceiver extends BroadcastReceiver { public static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION)) { SmsMessage[] smsMessages = getMessageFromIntent(intent); StringBuilder stringBuilder = new StringBuilder(); if (smsMessages != null && smsMessages.length > 0) { for (SmsMessage smsMessage : smsMessages) { stringBuilder.append("接收到了短信:\n发件人是:"); stringBuilder.append(smsMessage.getDisplayOriginatingAddress()); stringBuilder.append("\n------短信内容-------\n"); stringBuilder.append(smsMessage.getDisplayMessageBody()); stringBuilder.append("\n------getMessageBody-------\n"); stringBuilder.append(smsMessage.getMessageBody()); } } LogUtils.i(stringBuilder.toString()); Toast.makeText(context, stringBuilder.toString(), Toast.LENGTH_LONG).show(); } } public static SmsMessage[] getMessageFromIntent(Intent intent) { SmsMessage retmeMessage[] = null; Bundle bundle = intent.getExtras(); Object pdus[] = (Object[]) bundle.get("pdus"); retmeMessage = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { byte[] bytedata = (byte[]) pdus[i]; retmeMessage[i] = SmsMessage.createFromPdu(bytedata); } return retmeMessage; }}
解析短信消息的方法还有api给定的有如下,但是这个必须是得sdk 19以上才行。
SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
2.通过读取短信数据库,获取短信内容;
- 这种方式可以获取手机上所有的短信,包括已读未读的短信.
- 有一个问题,如果来了新的短消息呢?我们总不能写个线程,每隔多少秒,去读取一下短信数据库吧? 解决办法就是通过短信观察器监听短信变化.
示例代码:
public class SmsActivity extends BaseActivity { private Uri SMS_INBOX = Uri.parse("content://sms/"); private TextView mSmstext; private Button mSmstextButton; private SmsObserver smsObserver; class SmsObserver extends ContentObserver { public SmsObserver(Context context, Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); getSmsFromPhone(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sms); smsObserver = new SmsObserver(this, smsHandler); getContentResolver().registerContentObserver(SMS_INBOX, true, smsObserver); mSmstext = (TextView) findViewById(R.id.smstext); mSmstextButton = (Button) findViewById(R.id.getSmstxtButton); mSmstextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getSmsFromPhone(); } }); } Handler smsHandler =new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { return false; } }); public void getSmsFromPhone() { ContentResolver cr = getContentResolver(); String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"};//"_id", "address", "person",, "date", "type String where = " address = '18602388575' ";//AND date > "// + (System.currentTimeMillis() - 10 * 60 * 1000); Cursor cur = cr.query(SMS_INBOX, projection, "", null, "date desc"); if (null == cur) return; if (cur.moveToNext()) { String number = cur.getString(cur.getColumnIndex("address"));//手机号 String name = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表 String body = cur.getString(cur.getColumnIndex("body")); mSmstext.setText("number:" + number + "name:" + name + "body:" + body); } }}
3.使用注意
1.权限
2.
4.参考链接
http://blog.csdn.net/mad1989/article/details/22426415/
0 0
- Android拦截短信,接收短信
- android接收短信功能
- android 短信接收
- Android-拦截接收短信
- android 接收短信流程
- Android接收端口短信
- android 短信的接收!
- android短信接收过程
- Android 短信接收监听
- android短信接收流程
- Android-拦截接收短信
- 短信接收 Android
- android短信接收/发送
- Android接收短信-createFromPdu
- Android 接收短信
- android 发短信 和 接收 短信
- android中如何发送短信、接收短信
- Android接收短信和发送短信
- android library projects cannot be launched 报错原因!
- ImageView的ScaleType详解
- 3.4 C++四种继承关系中内存分布
- [js] 变量 操作符 对象
- Hive的使用之脚本文件
- Android 接收短信
- 文章标题
- ROS实战之IDE的配置
- MySQL-API接口大全
- 文件上传 ,java.lang.IllegalStateException: File has been moved - cannot be read again org.springframewor
- Unity3D - Unity游戏Mono内存管理与泄漏
- Keyguard显示流程介绍
- myeclipse 优化内存设置
- DNS笔记