手机卫士14-显示来电归属地

  1. 云栖社区>
  2. 博客>
  3. 正文

手机卫士14-显示来电归属地

code_xzh 2013-12-08 23:14:00 浏览558 评论0

摘要: 好啦,我们今天就要把号码归属地显示在有电话打进来的时候,其实也很简单的啦,我们只要开一个服务,监听电话的广播,然后在电话相应的状态,进行相应的操作就可以的啦 至于怎样把那个view显示到接听电话那个界面上,这个更简单啦,那个Toast是怎样显示的,我们就怎样显示就可以了。 我们打开Toast的源码,可以发现在一个静态的内部类TN里面,有这样一段代码





好啦,我们今天就要把号码归属地显示在有电话打进来的时候,其实也很简单的啦,我们只要开一个服务,监听电话的广播,然后在电话相应的状态,进行相应的操作就可以的啦

至于怎样把那个view显示到接听电话那个界面上,这个更简单啦,那个Toast是怎样显示的,我们就怎样显示就可以了。

我们打开Toast的源码,可以发现在一个静态的内部类TN里面,有这样一段代码

其实这一段就是设置好我们的Toast而已的代码啦,我们可以参照着来写一下

好啦,我们就要修改上一次写的AddressService这个类啦,

  1. package com.xiaobin.security.service;

  2. import android.app.Service;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.graphics.PixelFormat;
  6. import android.os.IBinder;
  7. import android.telephony.PhoneStateListener;
  8. import android.telephony.TelephonyManager;
  9. import android.view.WindowManager;
  10. import android.widget.TextView;

  11. import com.xiaobin.security.engine.NumberAddressService;

  12. public class AddressService extends Service
  13. {
  14.         private TelephonyManager telephonyManager;
  15.         private MyPhoneListener listener;
  16.         private WindowManager windowManager;
  17.         private TextView tv;

  18.         @Override
  19.         public IBinder onBind(Intent intent)
  20.         {
  21.                 return null;
  22.         }
  23.         
  24.         @Override
  25.         public void onCreate()
  26.         {
  27.                 super.onCreate();
  28.                 
  29.                 windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
  30.                 listener = new MyPhoneListener();
  31.                 telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  32.                 telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
  33.         }
  34.         
  35.         @Override
  36.         public void onDestroy()
  37.         {
  38.                 super.onDestroy();
  39.                 //停止监听
  40.                 telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
  41.         }
  42.         
  43.         //显示归属地的窗体
  44.         private void showLocation(String address)
  45.         {
  46.                 WindowManager.LayoutParams params = new WindowManager.LayoutParams();
  47.                 params.width = WindowManager.LayoutParams.WRAP_CONTENT;
  48.                 params.height = WindowManager.LayoutParams.WRAP_CONTENT;
  49.                 params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE //无法获取焦点
  50.                                 | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE //无法点击
  51.                                 | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;//保持屏幕亮
  52.                 params.format = PixelFormat.TRANSLUCENT;//设置成半透明的
  53.                 params.type = WindowManager.LayoutParams.TYPE_TOAST;
  54.                 params.setTitle("Toast");
  55.                 
  56.                 tv = new TextView(AddressService.this);
  57.                 tv.setText("归属地: " + address);
  58.                 windowManager.addView(tv, params);
  59.         }
  60.         
  61.         //========================================================================
  62.         
  63.         private class MyPhoneListener extends PhoneStateListener
  64.         {
  65.                 @Override
  66.                 public void onCallStateChanged(int state, String incomingNumber)
  67.                 {
  68.                         super.onCallStateChanged(state, incomingNumber);
  69.                         
  70.                         switch(state)
  71.                         {
  72.                                 case TelephonyManager.CALL_STATE_IDLE : //空闲状态
  73.                                         if(tv != null)
  74.                                         {
  75.                                                 windowManager.removeView(tv);//移除显示归属地的那个view
  76.                                                 tv = null;
  77.                                         }
  78.                                         break;
  79.                                         
  80.                                 case TelephonyManager.CALL_STATE_OFFHOOK : //接通电话
  81.                                         if(tv != null)
  82.                                         {
  83.                                                 windowManager.removeView(tv);//移除显示归属地的那个view
  84.                                                 tv = null;
  85.                                         }
  86.                                         break;
  87.                                         
  88.                                 case TelephonyManager.CALL_STATE_RINGING : //铃响状态
  89.                                         String address = NumberAddressService.getAddress(incomingNumber);
  90.                                         showLocation(address);
  91.                                         break;
  92.                                         
  93.                                 default : 
  94.                                         break;
  95.                         }
  96.                 }
  97.         }

  98. }
复制代码
就这样,我们的app就会在有电话进来的时候,把电话的归属地显示出来的啦但是记得在测试的时候,记得把我们上一次写的那个开启服务的CheckBox勾上,不然就不会显示出来的啦 好啦,今天的代码比较简单,就到这里,下一次,我们就美化一下这个显示框,加入风格的选择  Security_14接电话时显示电话归属地.rar (1.46 MB, 下载次数: 143)
【云栖快讯】一站式开发者服务,海量学习资源免费学  详情请点击

网友评论