Android实现获取未接来电和未读短信数量的方法

本文实例展示了Android实现获取未接来电和未读短信数量的方法,在Android程序开发中非常常见,是非常实用的功能,现分享给大家供大家参考。具体如下:

一、未读短信
 
首先注册Observer,当有新短信或彩信来的时候会调用 onChange方法,我们可以在onChange方法中去获取未读短信和彩信,然后做一些UI上的处理!

具体功能代码如下:

private ContentObserver newMmsContentObserver = new ContentObserver(new Handler()) {
  public void onChange(boolean selfChange) {
    int mNewSmsCount = getNewSmsCount() + getNewMmsCount();
  }
};
private void registerObserver() {
  unregisterObserver();
  getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,
      newMmsContentObserver);
  getContentResolver().registerContentObserver(MmsSms.CONTENT_URI, true,
      newMmsContentObserver);
}
private synchronized void unregisterObserver() {
  try {
    if (newMmsContentObserver != null) {
      getContentResolver().unregisterContentObserver(newMmsContentObserver);
    }
    if (newMmsContentObserver != null) {
      getContentResolver().unregisterContentObserver(newMmsContentObserver);
    }
  } catch (Exception e) {
    Log.e(TAG, "unregisterObserver fail");
  }
}

得到未读短信数量:

private int getNewSmsCount() {
  int result = 0;
  Cursor csr = getContentResolver().query(Uri.parse("content://sms"), null,
      "type = 1 and read = 0", null, null);
  if (csr != null) {
    result = csr.getCount();
    csr.close();
  }
  return result;
}

获取未读彩信数量:

private int getNewMmsCount() {
  int result = 0;
  Cursor csr = getContentResolver().query(Uri.parse("content://mms/inbox"),
      null, "read = 0", null, null);
  if (csr != null) {
    result = csr.getCount();
    csr.close();
  }
  return result;
}

二、未接来电

未接来电不能用 Observer监听,不过当有新的未接来电时,系统会发送一个广播com.android.phone.NotificationMgr.MissedCall_intent(锁屏上显示的未接来电数量就是通知监听这个广播实现的)

具体功能代码如下:

final IntentFilter filter = new IntentFilter();
filter.addAction("com.android.phone.NotificationMgr.MissedCall_intent");
final Application application = getApplication();
application.registerReceiver(new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (action != null && "com.android.phone.NotificationMgr.MissedCall_intent".equals(action)) {
      int mMissCallCount = intent.getExtras().getInt("MissedCallNumber");
    }
  }
}, filter);

广播只是当有新的未接来电时才会发送,但是如果有旧的未接来电没有读取时,上面的广播就得不到数据了,那就必须得从数据库中查找了。

功能代码如下:

private int readMissCall() {
  int result = 0;
  Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, new String[] {
      Calls.TYPE
    }, " type=? and new=?", new String[] {
        Calls.MISSED_TYPE + "", "1"
    }, "date desc"); 

  if (cursor != null) {
    result = cursor.getCount();
    cursor.close();
  }
  return result;
}

相信本文所述实例对于大家的Android程序开发能起到一点参考借鉴作用。

时间: 2014-08-19

Android实现短信验证码自动填写功能

本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下 实现思路很简单: 1.在需要输入验证码的Activity代码注册监听短信的广播 2.拦截短信,获取其中的验证码 3.回写到EditText private SmsReciver smsReciver = new SmsReciver(); /** 收到短信Action **/ String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED

Android编程实现定时发短信功能示例

本文实例讲述了Android编程实现定时发短信功能.分享给大家供大家参考,具体如下: 第一,要实现发短信的功能,必须要用到android系统中发短信的权限,即在AndoridManifest.xml中添加如下内容 <uses-permissionandroid:name="android.permission.SEND_SMS"/> 第二,使用AlarmManager来实现一个倒计时的功能,当时间到时发送短   信.AlarmManager有两个相似的用法: 1.在指定时常

Android编程实现拦截短信并屏蔽系统Notification的方法

本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法.分享给大家供大家参考,具体如下: 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission android:name="android.permission.RECEIVE_SMS"> </uses-permission> <uses-p

Android获取和读取短信验证码的实现方法

现如今,验证码在Android的客户端还是非常普遍的.通过手机账号和验证码直接去注册应用账户的信息.很多应用都以这种方式来完成注册.简单的介绍一下吧. Android获取短信验证码还是比较简单的,通过Mob官网提供的ShareSDK,调用其中内部的方法,就可以获取到短信的验证码了.提供一下Mob的官网地址.http://www.mob.com/#/在官网上注册相关的信息之后,下载相关的jar包和.so文件就可以实现获取短信验证码了(2.0之前的版本都需要下载jar包和 .so文件,而现在的2.2

Android短信接收监听、自动回复短信操作例子

定义广播接收器的Action: 复制代码 代码如下: private static final String TAG ="SmsService";/*** 信息发送状态广播*/private static final String ACTION_SMS_SEND  = "com.SmsService.send";  /*** 信息接收状态广播*/private static final String ACTION_SMS_DELIVERY = "com.S

Android实现自动提取短信验证码功能

本文实例讲解了Android自动提取短信验证码解决方案,分享给大家供大家参考,具体内容如下 主要功能及优点 1.收到验证码短信后,自动提取短信中的验证码填写到相应输入框 2.可指定一个号码,只读取与他有关短信,避免提取来源错误 3.利用正则表达式,可匹配各种类型验证码 模块集成关键步骤     将auto_getcode_demo中src包里的SMSContentObserver类复制到你的项目src包中 在SMSContentObserver中:    修改正则表达式内容来匹配自己想要获取的字

android短信拦截的实现代码

短信拦截的实现主要是使用了广播接收者来实现. BroadcastReceiver  广播接收者   必须指定要接收的广播类型.必须明确的指定action 广播:事件.普通广播: 是异步的.会广播接收者同时接收,不能被中断sendBroadcast()有序广播: 是同步的.会根据广播接收的优先级进行接收,是可以中断   短信到来广播 sendOrderBroadcast()priority的范围是:-1000 ~ 1000如果有序广播明确的指定了广播接收者,他是无法被中断的. 代码实现如下: 1.

Android实现发送短信功能实例详解

本文实例分析了Android实现发送短信功能的方法.分享给大家供大家参考,具体如下: 短信和打电话一样,都是android手机的基本功能,下面以实例说明android如何实现发送短信的功能. 程序如下所示: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.PendingIntent; import android.cont

android短信监听工具(示例代码)

在学习本实例之前,读者请先了解一下android四大组件中的"广播接收者"的基本概念和使用. 由于是"监听程序",所以就不需要建立Activity.这样也算是一种"遮掩"吧.使用BroadcastReceiver,就能达到这"不可告人"的目的.呵呵.当然,使用服务来开发此类应用,更加合适.这里就不再深入讨论"服务"了.本实例仅供学习参考,请勿非法用途. 复制代码 代码如下: package cn.itcas

android读取短信示例分享

复制代码 代码如下: package com.homer.sms; import java.sql.Date;import java.text.SimpleDateFormat; import android.app.Activity;import android.database.Cursor;import android.database.sqlite.SQLiteException;import android.net.Uri;import android.os.Bundle;import

android中可以通过两种方式调用接口发送短信

第一:调用系统短信接口直接发送短信:主要代码如下: 复制代码 代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getDefault(); List<String> divideContents = smsManager.divideMessage(content); for (String text : divideContents) { smsManager.sendTextMessage("150xxxxxxxx&qu

Android发送短信功能代码

本文实例讲述了Android发送短信功能代码,是进行Android程序开发中非常常见的重要功能.分享给大家供大家参考之用.具体方法如下: // 发送短信 public void sendMsg(){ String content = edtSend.getText().toString(); SmsManager smsManager = SmsManager.getDefault(); List<String> divideContents = smsManager.divideMessag

iOS发送短信功能的实现代码

发短信的功能对于一个需要渠道扩展的APP来说,必不可少.但是,当第一次看到这个需求时,我却一脸懵逼,因为之前并没有接触过,出于对未知事物的恐惧,被分配做这个任务的时候其实我是拒绝的,但是,没办法谁让我是小兵一个呢,只能硬着头皮强上了.在查阅了一番资料之后,发现这个功能做起来其实非常简单,不到十分钟就可以解决.下面我们就来聊一下如何实现这个功能. 首先,我们来介绍一个最为简单的方法,只需要一行代码就可以搞定,代码如下: [[UIApplication sharedApplication] open

关于Android发送短信获取送达报告的问题(推荐)

最近公司开发一个项目,要求app能够发送短信并获取送达报告.这本不是一个什么难题,实现这一功能的代码一搜一大把,那么这么简单的一个问题,为什么我要在这里提出来呢?那是因为我在写代码的时候掉入了一个坑,而且这很可能发生在很多和我一样粗心的朋友身上.先给大家分享一下当初让我掉进坑里的代码: 咋一看,好像这段代码并没有什么问题,但是在测试的时候发现无论发送多少条短信,每次都只能获取第一条短息的送达报告!!这个问题当时困扰了我很久,感觉自己明明没有写错啊,为什么会出现这样莫名其妙的问题呢?思索无果之后,

Android发送短信方法实例详解

本文实例讲述了Android发送短信方法.分享给大家供大家参考,具体如下: 短信和打电话一样,都是android手机的基本功能,下面以实例说明android如何实现发送短信的功能. 程序如下所示: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.PendingIntent; import android.content.I

shell脚本编写ping包及arp的监控并发送短信功能

下面给大家分享shell脚本编写ping包及arp的监控并发送短信功能,具体代码如下所示: #!/bin/bash NOW="`date +%Y%m%d-%H:%M:%S`" PHONES=15134567893 IP=10.100.8.78 GATEWAY=10.100.30.1 #ping失误的短信内容 content1="host is failed" #arp主机网关失误的短信内容 content2="GW is failed" #pin

jQuery实现订单提交页发送短信功能前端处理方法

本文实例讲述了jQuery实现订单提交页发送短信功能前端处理方法.分享给大家供大家参考,具体如下: 1.效果如图所示: 2.html代码: <div class="indFpho" > <p>手机号码:</p> <p> <input type="text" name="telphone" id="telphone" value="{$order_info.cons

IOS程序开发之跳转短信发送界面实现发送短信功能

项目需求:在程序开发中,我们需要在某个程序里面发送一些短信验证(不是接收短信验证,关于短信验证,传送门:http://www.cnblogs.com/wolfhous/p/5096774.html 项目实现: 新建demo,直接看我源码标志. 源码截图 真机截图 就是如此简单,如您有任何问题/建议或者更好的实现方法,联系本人. 可以看我折叠的源码 /** 点击发送短信按钮*/ - (IBAction)sendMessageBut:(id)sender { /** 如果可以发送文本消息(不在模拟器

阿里大鱼简单发送短信功能.net core版

阿里大鱼还未提供 .net core 版SDK,但提供了相关API,下面是.net core版实现,只是简单发送短信功能: using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Security.Cryptography; using System.Text; using Newtonsoft.Json; namespace ConsoleApp1 { pub

Android发送短信方法总结

android API 中提供了SmsManager类处理短信.其中的sendTextMessage(num, null, content, pend, null)函数就是发送,具体介绍如下: SMS涉及的主要类SmsManager 实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员. 公有方法: 1.ArrayList<String> divideMessage(String text) 当短信超过SMS消息的最大长度时,将