注:下面红色的字体暂时不能理解的请先略过,在文后会有详细解释


监听类似于挂钩函数,大致是做到当被监听的事件发生了之后系统提醒我们去处理,而不是我们启动一个线程不断去询问系统这个事件有没有发生。例如:(1)Button设置按下监听(2)java.awt.FramewindowsListener等。

在安卓种该如何实现监听呢?废话不多说,我们直接按照步骤直接来试试。

1.AndroidManifest.xml中进行配置监听器

       com.ap.iwork.broadcast.IWCallBroadcastListener" >

           

               ②android.intent.action.PHONE_STATE"/>

           

     

是继承自android.content.BroadcastReceiver的监听器类

该类需要重写BroadcastReceiver的onRecieive()方法。当发生了②中的事件,系统会生成①的实例,并调用它的onRecieive()方法。因此我们只要将我们对此事件的操作放到这个函数中调用。

当执行完我们的代码后,系统会自动调用①实例的onDestroy()函数来销毁实例。

是我们需要监听的事件。这是一个系统定义的action字符串本例中以android.intent.action.PHONE_STATE(监听系统接打电话)为例。

这是在android的系统配置中告诉系统需要监听中标明的事件,当发生了中的事件之后,系统会调用中的Listener监听类。

2.经过上面的讲解我们设置了监听器,我们知道了需要写我们自己的监听器类,那我们现在开始写自己的监听类。

//代码,TODO


package com.ls.broadcast;


import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.telephony.PhoneStateListener;

import android.telephony.TelephonyManager;


/**

* 系统事件监听器监听器

*

* @authorls

* @version 2013-07-29 8:18

*

*/

publicclass MyPhoneBroadcastListener extends BroadcastReceiver {

private MyPhoneListener listener;


@Override//当发生监听的事件,系统会调用这个方法

publicvoid onReceive(Context context, Intent intent) {

// TODO Auto-generated method

//intent.getAction()可以得到当前的事件,这里我们监听的是android.permission.READ_PHONE_STATE

//这时候intent.getAction().equals("android.permission.READ_PHONE_STATE");

//这是为了一个监听器可以监听多个事件,只要我们进行一次equals()判断进行不同的处理即可

//这里只能简单的获取通话状态发生改变消息

System.out.println( "phone state is change ----> " );

System.out.println( "action ----> " + intent.getAction() );

//进行细节上的监控,我们需要操作TelephonyManager,为它设置监听器,他就给我们反馈

//拿到系统的TelephonyManager

TelephonyManager tpManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);


/* 通过TelephonyManager获取一些手机卡的信息

String deviceId = tpManager.getDeviceId();//获取设备编号

       String simVountryIso = tpManager.getSimCountryIso();//获取SIM卡国别

       String simSerialNumber = tpManager.getSimSerialNumber();//获取SIM卡序列号    

int simState = tpManager.getSimState();//获取SIM卡状态

       String deviceSoftwarVersion = tpManager.getDeviceSoftwareVersion()!=null?tpManager.getDeviceSoftwareVersion():"未知";    //获取软件版本

       String netWorkOperator = tpManager.getNetworkOperator();//获取网络运营商代号

       String netWorkOperatorName = tpManager.getNetworkOperatorName();//获取网络运营商名称

int phoneType = tpManager.getPhoneType();//获取手机制式

       String cellLocation = tpManager.getCellLocation().toString();//获取设备当前位置

*/

listener = new MyPhoneListener();//创建监听器


tpManager.listen( listener, PhoneStateListener.LISTEN_CALL_STATE);//设置监听器

}


privateclass MyPhoneListener extends PhoneStateListener {


@Override//当电话状态发生改变的时候,系统会调用这个方法

publicvoid onCallStateChanged(int state, String incomingNumber) {

// TODO Auto-generated method stub

switch( state ){

case TelephonyManager.CALL_STATE_IDLE :

System.out.println( "挂断" );

break;

case TelephonyManager.CALL_STATE_OFFHOOK :

System.out.println( "接听" );

break;

case TelephonyManager.CALL_STATE_RINGING :

System.out.println( "响铃,来电号码 ----->" + incomingNumber );

break;

}

}

}

}


3.当然啦,我们要监听系统的事件,要使用硬件,我们当然要加入权限了,假如没有权限的话,程序运行起来是没有任何效果的。

   

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

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

   

4.程序运行效果。

5.×××:http://down.51cto.com/data/888080

更多相关文章

  1. Android新建项目与简易Button事件
  2. Android中AIDL的使用(一) 之 AIDL经典示例
  3. Android的事件处理机制之基于监听的事件处理
  4. Android(安卓)MVC 架构详解
  5. 监听Android设备网络变化 - 亲测在华为Emui8.0 以及 Android原生
  6. Android电话系统
  7. [原] Android监听网络的变化
  8. Android视频播放器实现小窗口和全屏状态切换
  9. Android解决应用崩溃后重启的问题,以及与bugly的冲突

随机推荐

  1. Android(安卓)Websocket
  2. cocos2dx 2.2.2 的Android交叉编译问题汇
  3. Android(安卓)MediaCodec硬编兼容性测试
  4. android APT 切换 annotationProcessor使
  5. Android(安卓)Http访问网络 学习(慕课网学
  6. Qt for android 开机自启动、开机黑屏处
  7. android显示单位
  8. Android工程中javax annotation Nullable
  9. Android(安卓)adapter has changed解决方
  10. 关于Ant编译Android中Ant学习研究