android 短信监听

Android 手机上监听短信有两种方式:

 

1、 接受系统的短信广播,操作短信内容。

 

优点:操作方便,适合简单的短信应用。

缺点:来信会在状态栏显示通知信息。

 

AndroidManifest.xml 

< uses-permission android:name = "android.permission.SEND_SMS" ></ uses-permission >

< uses-permission android:name = "android.permission.RECEIVE_SMS" ></ uses-permission >

 

<!-- Receiver -->

< receiver android:name = ".sms.SMSReceiver" >

< intent-filter >

    < action android:name = "android.provider.Telephony.SMS_RECEIVED" />

</ intent-filter >

</ receiver >

 

code 

package org.anymobile.demo.sms;

 

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.telephony.gsm.SmsMessage;

import android.util.Log;

 

public class SMSReceiver extends BroadcastReceiver

{

    public static final String TAG = "ImiChatSMSReceiver" ;

    //android.provider.Telephony.Sms.Intents

    public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED" ;

   

    @Override

    public void onReceive(Context context, Intent intent)

    {

       if (intent.getAction().equals( SMS_RECEIVED_ACTION ))

       {

           SmsMessage[] messages = getMessagesFromIntent(intent);

           for (SmsMessage message : messages)

           {

              Log.i ( TAG , message.getOriginatingAddress() + " : " +

                  message.getDisplayOriginatingAddress() + " : " +

                  message.getDisplayMessageBody() + " : " +

                  message.getTimestampMillis());

           }

       }

    }

   

    public final SmsMessage[] getMessagesFromIntent(Intent intent)

    {

        Object[] messages = (Object[]) intent.getSerializableExtra( "pdus" );

        byte [][] pduObjs = new byte [messages. length ][];

 

        for ( int i = 0; i < messages. length ; i++)

        {

            pduObjs[i] = ( byte []) messages[i];

        }

        byte [][] pdus = new byte [pduObjs. length ][];

        int pduCount = pdus. length ;

        SmsMessage[] msgs = new SmsMessage[pduCount];

        for ( int i = 0; i < pduCount; i++)

        {

            pdus[i] = pduObjs[i];

            msgs[i] = SmsMessage.createFromPdu (pdus[i]);

        }

        return msgs;

    }

 

}

 

2、 应用观察者模式,监听短信数据库,操作短信内容。

 

优点:可以拦截来信在状态栏的显示通知,适合作短信拦截。

缺点:可以发展成 MU ,在后台悄悄的收 / 发短信。

 

实例如下:

SystemEventReceiver :收到开机启动 OK 的广播后,启动 BootService 服务;收到应用发送短信的 INTENT 后,调用系统接口发送短信

BootService :开启服务后,打开短信监听器

SMSObserver :数据观察者,监听短信数据库

SMSHandler :短信处理器

 

AndroidManifest.xml 

< uses-permission android:name = "android.permission.READ_SMS" ></ uses-permission >

< uses-permission android:name = "android.permission.WRITE_SMS" ></ uses-permission >

<!-- Service -->

< service android:name = ".BootService"

        android:label = "@string/app_name" >

    < intent-filter >

                < action android:name = "org.anymobile.test.service.IMICHAT" />

    < category android:name = "android.intent.category.DEFAULT" />

</ intent-filter >

</ service >

<!-- Receiver -->

< receiver android:name = ".SystemEventReceiver" >

< intent-filter >

    < action android:name = "android.intent.action.BOOT_COMPLETED" />

</ intent-filter >

</ receiver >

 

code 

package org.anymobile.demo.sms;

 

import android.content.ContentUris;

import android.content.Context;

import android.content.Intent;

import android.net.Uri;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

 

public class SMSHandler extends Handler

{

    public static final String TAG = "SMSHandler" ;

 

    private Context mContext ;

   

    public SMSHandler(Context context)

    {

       super ();

       this . mContextApple-conv

分享到:
评论
wangtingshuai
  • 浏览: 2521 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
文章分类
社区版块
存档分类
最新评论

你可能感兴趣的:(apple,android,应用服务器,xml,OS)