其实无论呼入呼出 都可以使用receive捕获相关信息,当然 android不支持程序不能拨电话的 我们也是间接实现
public void onReceive(Context context, Intent intent){
String action = intent.getAction();
if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
String number = getResultData();
if (number.startsWith(BYPASS_PREFIX)) {
setResultData(number.substring(BYPASS_PREFIX.length()));
}
else { // do additional processing } }

2.拆解短信
http://www.androidcompetencycenter.com/2008/12/android-api-sms-handling/
public class SMSReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
Bundle myBundle = intent.getExtras();
SmsMessage [] messages = null;
String strMessage = "";
if (myBundle != null)
{
Object [] pdus = (Object[]) myBundle.get("pdus");
messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
strMessage += "SMS From: " + messages[i].getOriginatingAddress();
strMessage += " : ";
strMessage += messages[i].getMessageBody();
strMessage += "\n";
}
Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show(); } }}
3.<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.neocodenetworks.smsfwd"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<receiver android:name=".SmsReciever">
<intent-filter>
<action android:name="android.provider.telephony.SMS_RECIEVED"></action>
</intent-filter>
</receiver>

</application>

<uses-sdk android:minSdkVersion="6" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>

public class SmsReciever extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "smsfwd";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Intent recieved: " + intent.getAction());
if (intent.getAction().equil(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");

final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
if (messages.length > -1) {
Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());

NetComm.SendMessage("me", messages[0].getOriginatingAddress(), messages[0].getMessageBody());
} } } }

4.得到所有短信
Uri allMessage = Uri.parse("content://sms/");ContentResolver cr = getContentResolver();Cursor c = cr.query(allMessage, null, null, null, null);while (c.moveToNext()) { String row = c.getString(1);}
5.得到未读短信
for (int i = 0; i < messages.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); from = ""+messages[i].getOriginatingAddress(); body = ""+messages[i].getMessageBody(); inSIM = (messages[i].getIndexOnSim() != -1); if (inSIM) { int status = messages[i].getStatusOnSim(); if (status == SmsManager.STATUS_ON_SIM_UNREAD) { Toast.makeText(context, "Message Unread on SIM: "+from+": "+body, Toast.LENGTH_SHORT).show(); } } }

5.得到来电的电话号码:

<receiver android:name=".CustomBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>

</application>
<uses-sdk android:minSdkVersion="5" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
public class CustomPhoneStateListener extends PhoneStateListener {

private static final String TAG = "CustomPhoneStateListener";

public void onCallStateChange(int state, String incomingNumber){

Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
Log.v(TAG, incomingNumber);

switch(state){
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "RINGING");
break;
}
}
public class CustomBroadcastReceiver extends BroadcastReceiver {

private static final String TAG = "CustomBroadcastReceiver";

@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "WE ARE INSIDE!!!!!!!!!!!");
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener();

telephony
.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);


Bundle bundle = intent.getExtras();
String phoneNr= bundle.getString("incoming_number");
Log.v(TAG, "phoneNr: "+phoneNr);

}

4. 比较好的实例讲解http://mobiforge.com/developing/story/sms-messaging-android

更多相关文章

  1. android 将Bitmap转YUV420sp(实例)
  2. Android(安卓)数据存储方式有哪几种
  3. Android更新UI的2种方法
  4. 初探Android平台上的定位服务(GPS)
  5. Android触摸事件(三)-触摸事件类使用实例
  6. Android读取SIM联系人信息
  7. Android(安卓)Studio--使用Toast
  8. Android(安卓)开发笔记
  9. android的日积月累-监听短信

随机推荐

  1. android 内置webview 对https的支持
  2. React Native常用一些组件
  3. OpenGL ES 2.0 - Matrix. setLookAtM/.fr
  4. Android(安卓)属性动画(一)
  5. Android(安卓)JNI回调
  6. OKhttp3 get/post使用及获取网页源代码
  7. Android(安卓)开发之 View.post() 的作用
  8. Android(安卓)定位坐标系转换
  9. Android原生项目集成React Native
  10. Android(安卓)Activity切换动画overrideP