启动程序时启动一个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 { @Override
public 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"; @Override
public 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 { @Override
public IBinder onBind(Intent intent) {
return null;
} @Override
public 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");
} @Override
public 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"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lmy.SmsListener"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="7" /> <application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".SmsListenerActivity"
android:label="@string/app_name">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <receiver
android:name="MyBrocast"
android:enabled="true">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter> </receiver>
<service android:name="MyService"></service> </application>
<uses-permission
android:name="android.permission.RECEIVE_SMS" /><!-- 接收短信权限 -->
<!-- 添加接收系统启动消息(用于开机启动)权限 -->
<uses-permission
android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>

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

Android 接收短信的更多相关文章

  1. android接收短信——framework处理流程(android 5.1)

    modem层不懂,所以直接从RIL.java开始.以电信卡接收短信为例 modem通知RIL.java中的 RILReceiver处理接收信息 class RILReceiver implements ...

  2. Android接收短信

    Android收到短信时会广播android.provider.Telephony.SMS_RECEIVED消息,因此只要定义一个Receiver,收听该消息,就能接收短信. <receiver ...

  3. android拦截短信并屏蔽系统的Notification

    拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission  ...

  4. android 发送短信的两种方式,以及接收报告和发送报告

               android发送短信,以及接收报告和发送报告          android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下:    一.调起系统发短信功能    ...

  5. android基础---->发送和接收短信

    收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.今天我们开始自己创建一个简单的发送和接收短 ...

  6. android学习十四(android的接收短信)

    收发短信是每一个手机主要的操作,android手机当然也能够接收短信了. android系统提供了一系列的API,使得我们能够在自己的应用程序里接收和发送短信. 事实上接收短信主要是利用我们前面学过的 ...

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

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

  8. android发送短信验证码并自动获取验证码填充文本框

    android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com) ...

  9. android手机短信获取

    关于Android中对短信的一些相关操.我看到一个文章下面我就从标题中的三个方面来对Android系统中的短信操作进行一个简单地学习. 短信发送: 由于Android中对短信发送方法的优良封装,之后对 ...

随机推荐

  1. C#中IDisposable学习

    在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...

  2. phpMyAdmin import.php 跨站脚本漏洞

    漏洞名称: phpMyAdmin import.php 跨站脚本漏洞 CNNVD编号: CNNVD-201402-281 发布时间: 2014-02-21 更新时间: 2014-02-21 危害等级: ...

  3. 修改NGINX版本名称为任意WEB SERVER

    下载好Nginx的安装文件nginx-1.6.0.tar.gz,并把它解压. wget http://nginx.org/download/nginx-1.6.0.tar.gz .tar.gz 然后我 ...

  4. VM Depot 分布式计算框架主题应用精选

     发布于 2014-12-24 作者 陈 忠岳 在前几期为各位介绍了大数据应用主题以及开发运营主题的各类镜像后,这次我们精选了 VM Depot 站点中分布式计算相关主题的虚拟机镜像和大家一起分享 ...

  5. 不是 EPUB ,而是 ePub

    ePub 是 Electronic Publication 的缩写,意为电子出版,是一个自由的开放标准,属于一种可以“自动重新编排”的内容,也就是文字内容可以根据阅读设备的特性,以最适于阅读的方式显示 ...

  6. 在SQL2005实现维护计划-备份数据库

    一.備份數據庫維護計劃方案 [注]: 1.先啟動SQL Server Agent服務 2..交易記錄備份 (只限於完整和大量記錄復原模式). 3.下面中”清除備份trn文件” & “清除備份日 ...

  7. JavaScript window.location对象

    JavaScript window.location对象   示例 注意 方法 经常使用window.location,它的结构总是记不住,简单梳理下,方便以后查询. 示例 URL:http://b. ...

  8. 浅谈Xcode5和Xcode7在系统创建的文件夹和文件中的区别

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. [原]ubuntu下制作ubuntu源

    ubuntu下可以用debmirror来下载ubuntu的所有源: 配置ubuntu12.04_mirror.sh ########################################## ...

  10. HW2.2

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...