最新實戰教程,讓你瞭解Android自動化刷量、作弊與防作弊的那些事,案例:刷友盟統計、批量註冊蘋果帳號
好啦,我們今天就要把號碼歸屬地顯示在有電話打進來的時候,其實也很簡單的啦,我們只要開一個服務,監聽電話的廣播,然後在電話相應的狀態,進行相應的操作就可以的啦
至於怎樣把那個view顯示到接聽電話那個界面上,這個更簡單啦,那個Toast是怎樣顯示的,我們就怎樣顯示就可以了。
我們打開Toast的源碼,可以發現在一個靜態的內部類TN裏面,有這樣一段代碼
其實這一段就是設置好我們的Toast而已的代碼啦,我們可以參照着來寫一下
好啦,我們就要修改上一次寫的AddressService這個類啦,
package com.xiaobin.security.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.WindowManager;
import android.widget.TextView;
import com.xiaobin.security.engine.NumberAddressService;
public class AddressService extends Service
{
private TelephonyManager telephonyManager;
private MyPhoneListener listener;
private WindowManager windowManager;
private TextView tv;
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
super.onCreate();
windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
listener = new MyPhoneListener();
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
public void onDestroy()
{
super.onDestroy();
//停止監聽
telephonyManager.listen(listener, PhoneStateListener.LISTEN_NONE);
}
//顯示歸屬地的窗體
private void showLocation(String address)
{
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE //無法獲取焦點
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE //無法點擊
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;//保持屏幕亮
params.format = PixelFormat.TRANSLUCENT;//設置成半透明的
params.type = WindowManager.LayoutParams.TYPE_TOAST;
params.setTitle("Toast");
tv = new TextView(AddressService.this);
tv.setText("歸屬地: " + address);
windowManager.addView(tv, params);
}
//========================================================================
private class MyPhoneListener extends PhoneStateListener
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
switch(state)
{
case TelephonyManager.CALL_STATE_IDLE : //空閒狀態
if(tv != null)
{
windowManager.removeView(tv);//移除顯示歸屬地的那個view
tv = null;
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK : //接通電話
if(tv != null)
{
windowManager.removeView(tv);//移除顯示歸屬地的那個view
tv = null;
}
break;
case TelephonyManager.CALL_STATE_RINGING : //鈴響狀態
String address = NumberAddressService.getAddress(incomingNumber);
showLocation(address);
break;
default :
break;
}
}
}
}
就這樣,我們的app就會在有電話進來的時候,把電話的歸屬地顯示出來的啦
但是記得在測試的時候,記得把我們上一次寫的那個開啓服務的CheckBox勾上,不然就不會顯示出來的啦
好啦,今天的代碼比較簡單,就到這裏,下一次,我們就美化一下這個顯示框,加入風格的選擇