启动程序时启动一个service,在service里注册接收短信的广播,当手机收到短信里,打印出短信内容跟电话号码。

package com.lmy.SmsListener;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;public class SmsListenerActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);TextView tv = new TextView(this);tv.setText("Hello. I started!");setContentView(tv);Intent service = new Intent(this, MyService.class);this.startService(service);}
}

当service被kill后,我们可以在开机时自动启动service。

开机自动启动一个service,在service里注册接收短信的广播,当手机收到短信里,打印出短信内容跟电话号码。

开机启动后系统会发出一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED,这个Action只会发出一次。

创建一个类继承BroadcastReceiver,在onReceive(Context context, Intent intent)里面启动service。

package com.lmy.SmsListener;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class MyBrocast extends BroadcastReceiver {static final String ACTION = "android.intent.action.BOOT_COMPLETED";@Overridepublic void onReceive(Context context, Intent intent) {Log.v("dimos", "MyBrocast");if (intent.getAction().equals(ACTION)) {Intent service = new Intent(context, MyService.class);context.startService(service);}}}

在service中注册一个接收短信的广播:

package com.lmy.SmsListener;import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;public class MyService extends Service {@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();IntentFilter localIntentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");localIntentFilter.setPriority(2147483647);SmsRecevier localMessageReceiver = new SmsRecevier();Log.v("dimos", "MyService");registerReceiver(localMessageReceiver, localIntentFilter);}}

广播接收到短信:

package com.lmy.SmsListener;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class SmsRecevier extends BroadcastReceiver {public SmsRecevier() {super();Log.v("dimos", "SmsRecevier create");}@Overridepublic void onReceive(Context context, Intent intent) {String dString = SmsHelper.getSmsBody(intent);String address = SmsHelper.getSmsAddress(intent);Log.i("dimos", dString+","+address);//阻止广播继续传递,如果该receiver比系统的级别高,//那么系统就不会收到短信通知了
abortBroadcast(); }
}

获得短信内容跟短信地址:

package com.lmy.SmsListener;import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;public class SmsHelper {/*** 获得短信内容* */public static String getSmsBody(Intent intent) {String tempString = "";Bundle bundle = intent.getExtras();Object messages[] = (Object[]) bundle.get("pdus");SmsMessage[] smsMessage = new SmsMessage[messages.length];for (int n = 0; n < messages.length; n++) {smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);// 短信有可能因为使用了回车而导致分为多条,所以要加起来接受tempString += smsMessage[n].getDisplayMessageBody();}return tempString;}/*** 获得短信地址* */public static String getSmsAddress(Intent intent) {Bundle bundle = intent.getExtras();Object messages[] = (Object[]) bundle.get("pdus");return SmsMessage.createFromPdu((byte[]) messages[0]).getDisplayOriginatingAddress();}
}

在AndroidManifest.xml里声明并加权限:

<?xml version="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.lmy.SmsListener"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="7" /><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name=".SmsListenerActivity"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN" /><categoryandroid:name="android.intent.category.LAUNCHER" /></intent-filter></activity><receiverandroid:name="MyBrocast"android:enabled="true"><intent-filter><actionandroid:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver><service android:name="MyService"></service></application><uses-permissionandroid:name="android.permission.RECEIVE_SMS" /><!-- 接收短信权限 --><!-- 添加接收系统启动消息(用于开机启动)权限 --><uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>

这样就可以获得接收到的短信了,赶快试下吧!

转载于:https://www.cnblogs.com/ycclmy/p/3193143.html

Android 接收短信相关推荐

  1. Android接收短信

    既然写了发送短信,那么接收短信肯定也是一定要写的了. 接收短信主要是广播的接收,每当Andorid接收到一条新短信时都会产生一个广播,我们的程序通过捕获这个广播,就能获取短信了. 依旧是权限问题:&l ...

  2. Android接收短信和发送短信

    一.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  3. Android接收短信-createFromPdu

    createFromPdu(byte[]) method was deprecated in API level 23. Use createFromPdu(byte[], String) inste ...

  4. Android拦截短信并屏蔽Notification

    Android拦截短信并屏蔽Notification 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收" ...

  5. Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容

    在上一篇文章 Android简单实现BroadCastReceiver广播机制 中简单的实现了一个广播机制,这里利用BroadCarstRecevier实现一个接收短信并显示内容的案例,当然至于接收到 ...

  6. Android中发送和接收短信

    在做Android开发中经常要用到短信的发送和短信的接收,调用Android提供的api实现起来很简单,今天要用到这个功能研究了一下顺便写下来加强一下记忆. 1.首先创建一个Android Proje ...

  7. Android从普通发送和接收短信到对短信进行拦截

    概述: 说实话,关于Android中对短信的一些相关操作是一个比较入门的东西.那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Andro ...

  8. android sms 接收短信,Android SMS 短信操作

    android的短信保存在短信库里,但并提供类似Contacts的公开的Content Provider方便操作.这里简单的介绍下:android中的短信信息保存在/data/data/com.and ...

  9. Android:短信的接收

    短信的接收, 请先看一个 Demo private void initReceiverSms() {tv_content = (TextView) findViewById(R.id.tv_conte ...

  10. android app 短信接收,Android创建简单发送和接收短信应用

    本文实例为大家分享了Android创建发送和接收短信应用的简单实现过程,供大家参考,具体内容如下 一.接收短信 项目的结构如下:一个简单的接收和发送短信的功能 1.定义一个接收短信的广播:当手机接收到 ...

最新文章

  1. 【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】
  2. 卸载后的mysql和navicat怎么清除干净_清除电脑“牛皮癣 ”,带你回归清爽体验~...
  3. java图片转换成base64_Java将图片转换成Base64字符串
  4. Reporting Service 钻取
  5. 102 二叉树层序遍历
  6. 保护 ASP.NET Web 部件页面
  7. 使用ajax局部更新Razor页面
  8. 网络执法官.P2P终结者等监控网络流量控制软件的原理和防范
  9. 如何避免程序员的大脑超载?
  10. Linux 工具套件 —— binutils、readelf
  11. 深度学习2.0-33.BatchNorm
  12. 让在vc6创建的程序中,控件可以随xp风格的改变而变化,不用再程序中添加代码来自己实现~...
  13. 图-3月12日-[评委计分系统3.0-双屏专业版]又有较大的专业升级,
  14. 后端Java架构师图谱(架构师必经之路)
  15. 小米5刷android p6,小米5刷recovery教程 小米5第三方recovery下载
  16. 卸载mac的flash player
  17. 初始智遥工作流软件——流程设置篇
  18. 7-22 验证手机号
  19. oracle导入提示字符过长,Oracle 解决【ORA-01704:字符串文字太长】
  20. js根据当前时间,获取本周一和本周日

热门文章

  1. 如何使用Alfred mac版的Snippets文字扩展功能
  2. Easy Data Transform如何在Excel中删除重复的行?
  3. 机器视觉的发展现状和前景分析
  4. 关于Jedis无法连接上Linux上Redis问题
  5. Koa-router 优先级问题
  6. StreamInsight 浅入浅出(三)—— 适配器
  7. windows phone笔记
  8. java除,小数的问题
  9. ITAA学员的经典对白
  10. 使用Mybatis-Generator自动生成entity实体、dao接口以及mapper映射文件