1、调用系统发送短信界面(传入手机号码+短信内容)
2、隐藏发送短信(指定号码指定内容)(这里隐藏只是没有反写入数据库)

3、获得收件箱接收到的短信

4、Android屏蔽新短信通知提示信息:(ContentObserver)

4、删除刚接收到的短信:

A)、带提示删除

B)、无新短信通知=删除短信

所用到的相关数据类:

Intent、SmsManager、BroadcastReceiver、ContentObserver、Bundle

涉及动作(Action):

android.provider.Telephony.SMS_RECEIVED

涉及权限:

<!-- 短信 -->

<uses-permission android:name="android.permission.SEND_SMS" />

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>

<uses-permission android:name="android.permission.READ_SMS"></uses-permission>

1、调用系统发送短信界面(传入手机号码+短信内容)

(直接使用Intent 意图执行系统的sms即可--同理这里可以使用该方式调用手机发送邮件等)源码如下:

public void SendSMS( String aContent ){

// 新建smsto意图

Intent iIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:158********"));//传入要发送的地址

// 设置短信内容

iIntent.putExtra("sms_body", aContent);//设置传递的信息内容

// 启动短信服务内容

aContent.startActivity(iIntent);//直接打开意图即可

}

2、隐藏发送短信(指定号码指定内容)(这里隐藏只是没有反写入数据库)
创建发送自己的短信需要用到短信管理类SmsManager,使用它的sendTextMessage方法即可实现程序发送:

public void SendSMSHide(String aPhoneNUM, String aContent){

// 创建一个默认的SmsManager。

SmsManager aSmsManager = SmsManager.getDefault();

// 发送信息的intent参数。

String aSent = "SMS_SENT";

// 信息反馈的intent参数。

String aDelivered = "SMS_DELIVERED";

// 创建发送新信息的PendingIntent对象

PendingIntent aSentPI = PendingIntent.getBroadcast(this, 0, new Intent(aSent), 0);

// 信息反馈的PendingIntent。

PendingIntent aDeliveredPI = PendingIntent.getBroadcast(this, 0,

new Intent(aDelivered), 0);

aSmsManager .sendTextMessage(aPhoneNUM, null, aContent, aSentPI, aDeliveredPI);//发送短信(还可以发送彩信等)

//debuge

if(BOOL_ISDEBUGE){

Toast.makeText(aContent,"短信送出成功!!",Toast.LENGTH_SHORT ).show();

}

}

3、获得收件箱接收到的短信

A)、方法一:

通过继承BroadcastReceiver服务,处理onReceive函数,判断接收到的动作为SMS_RECEIVED

我将其封装在ReceiveSMS(aContext, aIntent);函数中只需要在onReceive()函数中调用即可!

public void ReceiveSMS(Context aContext, Intent aIntent) {

if (aIntent.getAction().equals(SSTR_SMSACTION)) { // 监听SMS_RECEIVED消息

Bundle iBundle = aIntent.getExtras(); // 获取Intent数据

if (iBundle != null) {

Object[] iObject = (Object[]) iBundle.get("pdus"); // 获取pdus对象

SmsMessage iMsg = SmsMessage.createFromPdu((byte[]) iObject[0]); // 初始化信息对象

m_strSMSAddress = iMsg.getDisplayOriginatingAddress(); // 获取信息发送人

m_strSMSText = iMsg.getDisplayMessageBody(); // 获取信息内容

//to do your things

Toast.makeText(aContext, "Address = "+m_strSMSAddress+"\nCountent = "+m_strSMSText, Toast.LENGTH_LONG).show();

}

}

}

B)、方法二:继承ContentObserver类在onChange中调用(注册监听sms即可)

this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);

4、Android屏蔽新短信通知提示信息:(ContentObserver)

大致思路先从收件箱获得指定未读短信,在执行通知前更改为已读,执行SQL的updata即可

@Override

public void onChange(boolean selfChange) {

super.onChange(selfChange);

//读取收件箱中指定号码的短信

cursor = managedQuery(Uri.parse("content://sms/inbox"),

new String[]{"_id", "address", "read"},

"read = 0", null,

"date desc");

cursor.moveToFirst();

for(int i =0;i<cursor.getCount();++i)

{

Log.i("address","address = "+cursor.getLong(1));

if(cursor.getString(1).indexOf("136******")>=0)

{//这里运用indexof方式查找,并没有用比较因为系统会有国际号码

ContentValues values = new ContentValues();

values.put("read", "1");        //修改短信为已读模式

getContentResolver().update(Uri.parse("content://sms/inbox"), values, "
_id=?", new String[]{""+cursor.getInt(0)});

break;//这里如果跳出就只能更改一条(刚收到的可以这样实现而且手机上方将不再有短信提示)

}

cursor.moveToNext();

}

}

5、删除刚接收到的短信:

A)、带提示删除(这样不知到有什么用。呵呵。写出来分享)

短信能删除但是当手机接收到短信时还会在手机通知里面显示给用户

继承BroadcastReceiver类,首先获得会话id在执行数据库删除即可

I、获得会话id:

(思路这样还可以简洁的-网上找的大家也可以用上面的managedQuery方法)

private long getThreadId(Context aContext) {

long threadId = 0;

String SMS_READ_COLUMN = "read";

String WHERE_CONDITION = SMS_READ_COLUMN + " = 0";

String SORT_ORDER = "date DESC";

int count = 0;

Cursor cursor = aContext.getContentResolver().query(

Uri.parse("content://sms/inbox"),new String[] { "_id", "thread_id", "address", "person", "date",

"body" },WHERE_CONDITION,null,SORT_ORDER);

if (cursor != null) {try {count = cursor.getCount();

if (count > 0) {

cursor.moveToFirst();

threadId = cursor.getLong(1);}

} finally {cursor.close();}}

Log.i("threadId", String.valueOf(threadId));

return threadId;}

II、执行删除:

这里我们可以在BroadcastReceiver的onReceive函数里面直接调用删除方法如下:

long id = getThreadId(aContext);

Uri mUri=Uri.parse("content://sms/conversations/" + id);

//无条件删除id所有会话,第二个参数可以添加条件

aContext.getContentResolver().delete(mUri, null, null);

是这里你会发现你删除的并不是你刚才发送的信息,而是你上一次发送的信息的所有,这里是为什么呢,原因是我们刚刚监听的收件箱的时候当前会话是还没有来得
及创建的,所以删除会话也是删除的以前的,所以这里我们需要时间。可以用如下方式来实现:这样就会成功了。但是这种方式短信通知依然存在

new Thread(){

public void run(){

try {sleep(600);//等待一段时间删除

} catch (InterruptedException e) {

e.printStackTrace();}

long id = getThreadId(aContext);

Uri mUri=Uri.parse("content://sms/conversations/" + id);

aContext.getContentResolver().delete(mUri, null, null);

}}.start();

Android的基本常用的短信操作的更多相关文章

  1. 【Android】Android解析短信操作

    目录结构: contents structure [-] 获取短信 发送短信 1.获取短信 在AndroidManifest.xml中,添加权限: <uses-permission androi ...

  2. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  3. 利用Android Lost通过互联网或短信远程控制安卓设备

    利用Android Lost通过互联网或短信远程控制安卓设备 作者:Jack Wallen| 杰克·瓦伦翻译:PurpleEndurer.2014-11-15第1版 使用智能手机要考虑的一个至关重要的 ...

  4. Android安卓电话拦截及短信过滤

    package com.focus.manager; import java.lang.reflect.Method; import Android .app.Activity; import And ...

  5. 【Android学习】调用系统短信、电话

    今天全心投入Android学习已经有一段时间了,从起初的啥也不懂,到现在半知半解状态,随笔记录些简单且常用的系统功能代码. 调用Android系统短信,其实调用短信非常简单,一个方法就可以搞定.我们可 ...

  6. [android]ShareSDK——内容分享和短信验证

    前言 新版本号ShareSDK的分享和短信验证,按官网的文档,都须要加入一个<Activity></Activity>标签,而分享和短息验证的这个标签内容都一样.会冲突. 解决 ...

  7. android 中调用接口发送短信

    android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信:主要代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getD ...

  8. Android Tips: 打电话和发短信

    利用Android打电话非常简单,直接调用Android内在的电话功能就可以了. btnDail.setOnClickListener(new OnClickListener(){ @Override ...

  9. Android 利用内容观察者实现短信窃听

    <Android 内容观察者的原理>中介绍了内容观察者的一些基本原理,并做了简单的实战,本文接着进一步做一个小项目实战 package com.wuyudong.smslistener; ...

随机推荐

  1. Python 面试题学习

    Python的函数参数传递 在Python中,strings,tuples=('abc',123,2.2,'join),numbers 是不可更改的对象. list=['abc',123,2.23,' ...

  2. day7异常处理

    异常处理 下面看一个简单例子: data = {} try: data["name"] except KeyError as e: #e是错误的相信信息,错误的原因 print(& ...

  3. Bridge 桥接

    意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 动机 当一个抽象可能有多个实现时,通常用继承来协调它们.抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现.但是此方法有时不够灵活 ...

  4. 001 Anaconda的介绍与安装

    1.官网 www.continuum.io 2.ananconda的版本 同一个版本下对应一个python3与python2,在这里下载使用python 2.7的版本. 3.概述 Anaconda是一 ...

  5. hdoj1879 继续畅通工程(Prime || Kruskal)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1879 思路 这题和hdoj1102很像,图中的有一些路已经修好了,对于这些已经修好的路,我们令还需要修 ...

  6. java 代理设计模式

    首先代理(deleration)是什么,在日常生活中我们有很多这种的例子,比如你上个QQ,各种空间被什么代理刷屏,对的,代理不是生产产品的商家,也不是进购产品的卖家,他们只是帮别人卖东西,这就相当于一 ...

  7. React Native踩坑之FlatList组件中的onEndReached

    最近在做一个RN项目,有使用到FlatList这样一个RN封装的组件去做上拉加载更多功能,在iOS和Android平台上,总结了以下几个遇到的问题及解决方案 1. 进入页面onReached开始就被触 ...

  8. CodeForces - 620C Pearls in a Row 贪心 STL

    C. Pearls in a Row time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. 掩码计算工具netmask

    掩码计算工具netmask   在网络扫描和防火墙配置中,经常需要计算IP地址范围和对应的掩码.为了简化这个过程,Kali Linux预置了一个掩码计算工具netmask.该工具不仅可以根据IP地址范 ...

  10. Swift2.0语言教程之闭包

    Swift2.0语言教程之闭包 Swift2.0语言闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用.Swift中的闭包与C和Objective-C中的代码块(blocks)以及其他一些编程语 ...