Android項目實戰--手機衛士14--接電話時顯示電話歸屬地



最新實戰教程,讓你瞭解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勾上,不然就不會顯示出來的啦

 

好啦,今天的代碼比較簡單,就到這裏,下一次,我們就美化一下這個顯示框,加入風格的選擇

 

今天源碼下載

 

 

 

 

 

 

發佈了47 篇原創文章 · 獲贊 112 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章