最近开发项目中需要监听当前手机的状态(空闲,来电,接通),在来电时需要获取来电的手机号码。

写了一个服务一直运行在后台来对手机的状态进行监听,代码如下。

监听手机状态的Service:

import android.app.Service;import android.content.Context;import android.content.Intent;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class PhoneService extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);        manager.listen(new PhoneListener() , PhoneStateListener.LISTEN_CALL_STATE);}}

监听手机的状态PhoneListener:

import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;public class PhoneListener extends PhoneStateListener {/** * state当前手机的状态 * incomingNumber呼入的手机号码 */@Overridepublic void onCallStateChanged(int state, String incomingNumber) {// TODO Auto-generated method stubsuper.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_IDLE://空闲或者挂断break;case TelephonyManager.CALL_STATE_OFFHOOK://接通break;case TelephonyManager.CALL_STATE_RINGING://来电响铃Log.d("TAG", "得到的来电号码是:" + incomingNumber);break;}}}

MainActivity:

import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;public class MainActivity extends Activity {private Context context;public static final String ACTION = "recordingFlag";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                context = getApplicationContext();                //启动后台监听服务        Intent intent = new Intent();        intent.setAction(ACTION);        intent.setPackage(getPackageName());        context.startService(intent);    }}

manifest配置文件:

<!-- 注册服务 -->        <service android:name="com.example.service.PhoneService">            <intent-filter>                <action android:name="recordingFlag"/>            </intent-filter>        </service>

最后,不要忘记添加读取手机状态的权限:

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



更多相关文章

  1. Android(安卓)沉浸式状态栏 SystemStatusManager源码
  2. Android(安卓)解决NestedScrollView 嵌套 RecyclerView出现的卡
  3. Open Core 上层代码结构
  4. Android(安卓)2.3.5 手动修改透明状态栏
  5. Android自动挂断来电(ITelephony的使用)
  6. Android(安卓)之SearchView翻译
  7. Android(安卓)通话处理流程【转】
  8. Android(安卓)webview 监听是否滚动到底部
  9. Android中监听EditText文本输入

随机推荐

  1. 金融企业云管平台建设的若干第一手经验
  2. 用 Keepalived+HAProxy 实现高可用负载均
  3. tp6控制器里直接调用验证器
  4. 小白前端入门笔记(12),设置哑链接
  5. 基于Mininet的MAC地址学习实验
  6. OpenDaylight实现轮询策略的负载均衡服务
  7. 摸鱼就是通透?还有多少你没意识到的毒金句
  8. Ryu:模块间通信机制分析
  9. 字节跳动不讲武德,居然笔试的时候出这种题
  10. OpenDaylight控制器MD-SAL解析