Android 接收短信
启动程序时启动一个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 接收短信的更多相关文章
- android接收短信——framework处理流程(android 5.1)
modem层不懂,所以直接从RIL.java开始.以电信卡接收短信为例 modem通知RIL.java中的 RILReceiver处理接收信息 class RILReceiver implements ...
- Android接收短信
Android收到短信时会广播android.provider.Telephony.SMS_RECEIVED消息,因此只要定义一个Receiver,收听该消息,就能接收短信. <receiver ...
- android拦截短信并屏蔽系统的Notification
拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission ...
- android 发送短信的两种方式,以及接收报告和发送报告
android发送短信,以及接收报告和发送报告 android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下: 一.调起系统发短信功能 ...
- android基础---->发送和接收短信
收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.今天我们开始自己创建一个简单的发送和接收短 ...
- android学习十四(android的接收短信)
收发短信是每一个手机主要的操作,android手机当然也能够接收短信了. android系统提供了一系列的API,使得我们能够在自己的应用程序里接收和发送短信. 事实上接收短信主要是利用我们前面学过的 ...
- Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容
在上一篇文章 Android简单实现BroadCastReceiver广播机制 中简单的实现了一个广播机制,这里利用BroadCarstRecevier实现一个接收短信并显示内容的案例,当然至于接收到 ...
- android发送短信验证码并自动获取验证码填充文本框
android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com) ...
- android手机短信获取
关于Android中对短信的一些相关操.我看到一个文章下面我就从标题中的三个方面来对Android系统中的短信操作进行一个简单地学习. 短信发送: 由于Android中对短信发送方法的优良封装,之后对 ...
随机推荐
- NRE
NRE是Non-Recurring Engineering的缩写,NRE费用即一次性工程费用,是指集成电路生产成本中非经常性发生的开支,明确地说就是新的集成电路产品的研制开发费·新产品开发过程中的设计 ...
- 【HDOJ】1068 Girls and Boys
匈牙利算法,最开始暴力解不知道为什么就是wa,后来明白,一定要求最优解.查了一下匈牙利算法相关内容,大致了解. #include <stdio.h> #include <string ...
- Oracle EBS 预警系统管理
本章主要讲述配置和设置Oracle EBS预警系统管理, 它比较方便和及时发用户或系统对数据库操作情况.下面讲一操作步聚: 1.预警系统管理-->系统-->选项 名称"Unix ...
- Android开发UI之给ListView设置布局动画效果
1.通过JAVA代码添加,资源文件基本上不修改 XML文件,只添加了一个ListView,就不贴XML文件的代码了. java代码: public class MainActivity extends ...
- Linux改变进程优先级的nice命令
前言: VPS普遍性能不高,很多人可能有这样一个感受,在执行du.tar等命令时,会造成系统负载飙升,Apache响应缓慢.这时nice命令改变进程优先级可能能缓解这种状况.nice命令用于调整Lin ...
- poj棋盘分割(记忆化)
http://poj.org/problem?id=1191 黑书上P116 想了挺久 没想出来 想推出一公式来着 退不出来.. 想偏了 正解:递归 #include <iostream> ...
- CMD命令窗口复制与粘贴
cmd命令提示符窗口中快速复制粘贴的方法常规方法 在“命令提 示符”窗口的任意一处,点击右键,在弹出的快捷菜单中选择“标记”命令. 此时在窗口的左上角处闪烁着一个长方块状的光标,将鼠标移动到希望复制的 ...
- 借助 ASR 和 System Center 执行基于 SAN 复制的企业级灾难恢复
Abhishek A. Hemrajani 云 + Enterprise项目经理 对于Azure Site Recovery,我们的优先级已经提升为每个人都可以在任意地点获取易于使用的灾难恢复 (DR ...
- MVC Action 返回类型[转]
一. ASP.NET MVC 1.0 Result 几何? Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回 ...
- wpa_supplicant使用笔记
还在搞8634,看不到头了..唉.wireless_tools的缺点是不支持WPA认证,所以有必要把wpa_supplicant也移植过来.无线 网卡是基于zydas芯片的,正好可以在网上搜到wpa_ ...