关于Android短信的解析
来源:互联网 发布:天刀丐帮捏脸数据男 编辑:程序博客网 时间:2024/06/16 13:26
说一下短信的解析过程,这个demo是以解析移动流量为目的,通过点击按钮发送短信从而解析出当月已使用的流量情况,代码如下
package jianhui.zhang;import java.util.Calendar;import java.util.regex.Matcher;import java.util.regex.Pattern;import android.os.Bundle;import android.app.Activity;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.telephony.SmsManager;import android.telephony.SmsMessage;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import android.view.View.OnClickListener;import android.provider.Settings;public class SmsParse extends Activity {TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {final String SMS_RECEIVEDS = "android.provider.Telephony.SMS_RECEIVED";super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btn = (Button)findViewById(R.id.btn);tv = (TextView)findViewById(R.id.tv);btn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {Calendar c = Calendar.getInstance();c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1);c.roll(Calendar.DATE, false);int day = c.get(Calendar.DATE);Log.e("jihui","--------" + day);// TODO Auto-generated method stub/*Uri uri = Uri.parse("smsto:10086");Intent intent = new Intent(Intent.ACTION_SENDTO,uri);intent.putExtra("sms_body", "cxll");startActivity(intent);*/SmsManager sms=SmsManager.getDefault();PendingIntent mPI=PendingIntent.getBroadcast(SmsParse.this,0,new Intent(),0);sms.sendTextMessage("10086",null,"cxll",mPI,null);//发送10086的查询短信//String net = Settings.System.getString(getContentResolver(),//Settings.System.NEXT_ALARM_FORMATTED);//Log.e("jihui","--------------------"+net);}});registerReceiver(SmsReceiver,new IntentFilter(SMS_RECEIVEDS));} //解析短信,先读取信息到字符串sb中,再通过正则表达式两次解析得到已使用的流量值private BroadcastReceiver SmsReceiver = new BroadcastReceiver(){public void onReceive(Context context,Intent intent){Log.e("jihui---------------","sms"); if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { //abortBroadcast(); Pattern pat = Pattern.compile("已使用(.*?)M");//解析出"已使用...M"样式的语句 Pattern pats = Pattern.compile("[\\d]+\\.[\\d]+");//解析出"已使用...M"语句中的数字 StringBuilder text= new StringBuilder();; StringBuilder sb = new StringBuilder(); Bundle bundle = intent.getExtras(); if(bundle!= null) { Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length]; for(int i=0;i<pdus.length;i++) { messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); } for(SmsMessage message:messages) { sb.append("短信来源"); sb.append(message.getDisplayOriginatingAddress()); sb.append(message.getDisplayMessageBody()); text.append(message.getDisplayMessageBody()); } } Toast.makeText(context, sb.toString(), 5000).show(); Matcher mat = pat.matcher(text); if(mat.find()){ System.out.println(mat.group()); } //mats = pats.matcher(mat.group()); Matcher mats = pats.matcher(mat.group()); if(mats.find()){ System.out.println(mats.group()); } tv.setText(text); }else if(intent.getAction().equals("android.intent.action.TIME_SET")){ Log.e("jihui","--------------------timeset"); } }};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.sms_parse, menu);return true;}}
main.xml代码如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".SmsParse" > <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/parse"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/btn" android:text="@string/hello_world" /></RelativeLayout>
最后记得在Manifest里加上权限
<uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/>
主界面里显示的是收到的短信,而解析出来的通过log打印出来,如下
- 关于Android短信的解析
- Android中短信的接受广播和短信的解析
- Android 短信解析
- Android解析短信信息
- 关于Android短信拦截
- Android有条件的读取短信-json的包装与解析
- android 短信(SMS)结构解析
- 短信接收--短信接收的pdu解析
- 关于Android客户端短信验证
- android关于xml的解析
- Android系统中关于短信(SMS)的操作
- android关于监听短信的广播获取内容
- Android中关于短信侦听的一个类
- 关于Android发送短信字数问题的分析及解决方法
- Android关于短信广播及权限的研究
- 短信回执的解析处理
- GSM短信的简单解析
- 短信的发送和解析
- oracle的逻辑结构包括表空间、段、区和数据块
- svn:ignore
- OCP-1Z0-051-V9.02-50题
- 自定义js扩展DOM功能
- css实现文字竖排效果
- 关于Android短信的解析
- Office文档在线编辑的实现之一
- Android开发 之 利用commons-net-3.0.1.jar包实现FTP上传下载功能
- sql规范告诫 解决兼容性问题 经验记录
- 面试题37:两个链表的第一个公共结点
- 类:加载、继承、多态(day04-13.10.16)
- Oracle GoldenGate 11gR2 Configuration On Oracle Database 11gR2 RAC ACFS
- 修正下载时错乱文件名小工具
- [并查集]最优路线