Android上的文本/数据短信(发送/接受/拦截)
来源:互联网 发布:陀地驱魔人 知乎 编辑:程序博客网 时间:2024/04/28 10:44
1) 发送文本短信:极简单:
<uses-permissionandroid:name="android.permission.SEND_SMS" /
SmsManager smsMgr = SmsManager.getDefault();
Intent sentIntent = newIntent("com.myself.action.SMS_SEND_RESULT");
PendingIntent dummySentEvent =PendingIntent.getBroadcast(MyActivity.this, 0, sentIntent,0);
Intent deliveryIntent = newIntent("com.myself.action.SMS_DELIVERY_RESULT");
PendingIntent dummyDeliveryEvent =PendingIntent.getBroadcast(MyActivity.this, 0, deliveryIntent,0);
try {
smsMgr.sendTextMessage(telNumStr, null, SmsTextStr,dummySentEvent,dummyDeliveryEvent);
} catch (Exception e) {
Log.e("SmsSending", "SendException", e);
}
2) 发送数据短信:
<uses-permissionandroid:name="android.permission.SEND_SMS" /
SmsManager smsMgr = SmsManager.getDefault();
Intent sentIntent = newIntent("com.myself.action.SMS_SEND_RESULT");
PendingIntent dummySentEvent =PendingIntent.getBroadcast(MyActivity.this, 0, sentIntent,0);
Intent deliveryIntent = newIntent("com.myself.action.SMS_DELIVERY_RESULT");
PendingIntent dummyDeliveryEvent =PendingIntent.getBroadcast(MyActivity.this, 0, deliveryIntent,0);
int port=51234;
byte[] sms_data = myString.getBytes();
try {
smsMgr.sendDataMessage(telNumStr, null, port,sms_data,dummySentEvent, dummyDeliveryEvent);
} catch (Exception e) {
Log.e("SmsSending", "SendException", e);
}
3) 接收文本短信:需要通过BroadcastReceiver接收:
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
<receiver android:name="MessageDemo">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
public classMessageDemo extendsBroadcastReceiver {
private static final String strACT="android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Contextcontext, Intent intent) {
if(intent.getAction().equals(strACT)) {
StringBuilder sb = newStringBuilder();
Bundle bundle = intent.getExtras();
if (bundle !=null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msg =newSmsMessage[pdus.length];
for (int i = 0; i <pdus.length; i++) {
msg[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
for (SmsMessage currMsg: msg) {
sb.append("From:");
sb.append(currMsg.getDisplayOriginatingAddress());
sb.append("\nMessage:");
sb.append(currMsg.getDisplayMessageBody());
}
} // end of !bundle
} // end of action match
Toast.makeText(context, sb.toString(),Toast.LENGTH_LONG).show();
// 最后必须将控制权交还给上一个Activity,不然程序会出错:
Intent intent =new Intent(context,MyLastActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
4) 接收数据短信:需要通过BroadcastReceiver接收:
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
<receiver android:name="MessageDemo">
<intent-filter>
<action android:name="android.intent.action.DATA_SMS_RECEIVED"/>
<data android:scheme="sms" />
<data android:host="localhost"/>
<data android:port="51234"/>
</intent-filter>
</receiver>
Receiver与文本短信类似,只是把getDisplayMessageBody()改成getUserData().
5)短信拦截:根据Android的特点,无法做到在短信放入短信数据库前拦截掉,目前只能监视短信数据库发生变化时进行过滤,此时可能已经给用户发出提醒了。
public class ScreenTest extends Activity {
class SmsContent extends ContentObserver{
private Cursor cursor = null;
public SmsContent(Handler handler) {
super(handler);
}
@Overridepublic void onChange( boolean selfChange) {
super.onChange(selfChange);
//读取收件箱中指定号码的短信
cursor = managedQuery(Uri.parse("content://sms/inbox"),
new String[]{ "_id", "address", "read"},
" address=? and read=?" ,
new String[]{ "12345678901", "0"},
"date desc" );
if (cursor != null){
ContentValues values = new ContentValues();
values.put("read", "1"); //修改短信为已读模式
cursor.moveToFirst();
while (cursor.isLast()) {
//更新当前未读短信状态为已读
getContentResolver().update(
Uri.parse("content://sms/inbox"),
values,
" _id=?" , new String[]{ ""+cursor.getInt(0)}
);
cursor.moveToNext();
}
}
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SmsContent content = new SmsContent( new Handler());
//注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
}
}
<uses-permissionandroid:name="android.permission.SEND_SMS" /
SmsManager smsMgr = SmsManager.getDefault();
Intent sentIntent = newIntent("com.myself.action.SMS_SEND_RESULT");
PendingIntent dummySentEvent =PendingIntent.getBroadcast(MyActivity.this, 0, sentIntent,0);
Intent deliveryIntent = newIntent("com.myself.action.SMS_DELIVERY_RESULT");
PendingIntent dummyDeliveryEvent =PendingIntent.getBroadcast(MyActivity.this, 0, deliveryIntent,0);
try {
} catch (Exception e) {
}
2) 发送数据短信:
<uses-permissionandroid:name="android.permission.SEND_SMS" /
SmsManager smsMgr = SmsManager.getDefault();
Intent sentIntent = newIntent("com.myself.action.SMS_SEND_RESULT");
PendingIntent dummySentEvent =PendingIntent.getBroadcast(MyActivity.this, 0, sentIntent,0);
Intent deliveryIntent = newIntent("com.myself.action.SMS_DELIVERY_RESULT");
PendingIntent dummyDeliveryEvent =PendingIntent.getBroadcast(MyActivity.this, 0, deliveryIntent,0);
int port=51234;
byte[]
try {
} catch (Exception e) {
}
3) 接收文本短信:需要通过BroadcastReceiver接收:
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
<receiver android:name="MessageDemo">
</receiver>
public classMessageDemo extendsBroadcastReceiver {
}
4) 接收数据短信:需要通过BroadcastReceiver接收:
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
<receiver android:name="MessageDemo">
</receiver>
Receiver与文本短信类似,只是把getDisplayMessageBody()改成getUserData().
5)短信拦截:根据Android的特点,无法做到在短信放入短信数据库前拦截掉,目前只能监视短信数据库发生变化时进行过滤,此时可能已经给用户发出提醒了。
}
- Android上的文本/数据短信(发送/接受/拦截)
- Android上的文本/数据短信(发送/接受/拦截)
- 短信的接受发送
- Android监听发送短信和接受短信的事件
- android短信发送和接受
- android 发送短信的拦截问题探索
- android 发送短信和接受短信模块
- Android 接受短信和发送短信
- Android中短信的收发机制 发送短信 接收短信 拦截短信 监听短信
- android发送短信和拦截短信信息
- Android中短信发送与接受
- android 短信管理(获取接受到短信的消息)
- android 短信管理(获取接受到短信的消息)
- android接受短信的BroadcastReceiver
- android最简单的发送文本短信的demo
- android的短信发送
- 拦截短信 中断发送短信
- android 发送短信 如何做到一条一条的发送,只有在上一条发送成功之后才发送下一条短信
- 直接拿来用!最火的Android开源项目(二)
- Java 、Android开发中的多线程编程技术------计时器实例
- [Ajax]异步的 JavaScript 和 XML:Ajax入门教程(整理)
- T4模版生成SpringMVC构造REST代码:第七篇 用T4模版生成MyBatis映射文件代码
- 直接拿来用!最火的Android开源项目(三)
- Android上的文本/数据短信(发送/接受/拦截)
- Android手势识别
- 28个Unix/Linux的命令行神器
- Python中的easy_install
- ACM书籍推荐
- 哥伦比亚大学 自然语言处理 公开课 授课讲稿 翻译(一)
- 数学常数 e 的含义
- 关于Python的super用法研究
- Android-query框架的基本使用(一)