发布于 2016-03-06 07:45:21 | 70 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

Android移动端操作系统

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。


这篇文章主要介绍了Android中监听短信的两种方法,本文讲解了监听广播、采用观察方法,监听短信数据库两种方法,需要的朋友可以参考下

1、监听广播

缺点,因为优先级的原因可能接收不到。

代码:


public static final String TAG = "ImiChatSMSReceiver";

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

  public void onReceive(Context context, Intent intent)
  {
    if (intent.getAction().equals(SMS_RECEIVED_ACTION))
    {
      SmsMessage[] messages = getMessagesFromIntent(intent);

      for (SmsMessage message : messages)
      {

        String text = message.getOriginatingAddress() + " : " +

        message.getDisplayOriginatingAddress() + " : " +

        message.getDisplayMessageBody() + " : " +

        message.getTimestampMillis();

        String num = message.getOriginatingAddress();
        Log.i(TAG, "-------------" + text);
        Toast.makeText(context, text, Toast.LENGTH_LONG).show();
        sendMessage(num, "来自" + num + "的短信已经收到", context);

        context.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, new SmsObserver(new Handler(), context));
      }
    }
  }

  public void sendMessage(String num, String text, Context context)
  {
    SmsManager smsManager = SmsManager.getDefault();
    PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, new Intent(), 0);
    String strContent = text;

    smsManager.sendTextMessage(num, null, strContent, sentIntent, null);

    TelephonyManager tl = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    int itype = tl.getPhoneType();
    Log.i(TAG, "-------------" + "当前卡类型为:" + itype);
    if (itype == TelephonyManager.PHONE_TYPE_GSM)
    {
      Toast.makeText(context, "当前卡类型为:GSM", Toast.LENGTH_LONG).show();
    }
    else if (itype == TelephonyManager.PHONE_TYPE_CDMA)
    {
      Toast.makeText(context, "当前卡类型为 : CDMA", Toast.LENGTH_LONG).show();
    }
    else if (itype == TelephonyManager.PHONE_TYPE_NONE)
    {
      Toast.makeText(context, "当前卡类型为:NONE", Toast.LENGTH_LONG).show();
    }
  }

  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、采用观察方法,监听短信数据库


public class SmsObserver extends ContentObserver
{

  private Context mContext;

  public SmsObserver(Handler handler , Context context)
  {
    super(handler);
    mContext = context;
  }
  
  public void onChange(boolean selfChange) 
  { 
    super.onChange(selfChange); 
    Cursor cursor =null; 
    try
    {
      //读取收件箱中的短信 
      cursor = mContext.getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, "date desc"); 
      String body;
      boolean hasDone =false;
      if (cursor !=null)
      { 
        while (cursor.moveToNext())
        {
          body = cursor.getString(cursor.getColumnIndex("body"));
          if(body !=null)//&& body.equals("【startMyActivity】"
          {
            hasDone =true;
            break;
          }
          if (hasDone)
          {
            break;
          }
        } 
      } 
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    finally
    {
      if(cursor!=null)    cursor.close();
    }
  }

}


用到的权限:


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



相关阅读 :
Android中监听短信的两种方法
Android中监听Home键的4种方法总结
Android 解决监听home键的几种方法
Android中获取状态栏高度的两种方法分享
Android中button实现onclicklistener事件的两种方式
Android实现图片轮播效果的两种方法
判断Android程序是否在前台运行的两种方法
Android通过LIstView显示文件列表的两种方法介绍
Android 工程内嵌资源文件的两种方法
Android判断后台服务是否开启的两种方法实例详解
Android中监听未接来电的2种方法
Android中监听判断网络连接状态的方法
最新网友评论  共有(0)条评论 发布评论 返回顶部
月排行榜

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务