public class AddressDao {
	// 查询号码的归属地信息
	// 13512345667 0101234567
	public static String getAddress(String number) {
		String address = number;
		SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/com.itheima.mobilesafe/files/address.db", null,SQLiteDatabase.OPEN_READONLY);
		// 正则表达式 过滤手机号码
		// ^1[3458]\d{9}$
		if (number.matches("^1[3458]\\d{9}$")) {// 手机号码
			String sqlStr ="select location from data2 where id = (select outkey from data1 where id = ?)";
			Cursor cursor = db.rawQuery(sqlStr,new String[] {number.substring(0, 7)});
			if (cursor.moveToNext()) {
				address = cursor.getString(0);
			}
			cursor.close();
		} else {// 其他号码  110 119 999 120  83559967  02012345678
			// 020 0201
			switch (number.length()) {
			case 3:
				address="报警电话";
				break;
			case 4:
				address="模拟器";
				break;
				
			case 5:
				address="客服电话";
				break;
				
			case 7:
				address="本地电话";
				break;
				
			case 8:
				address="本地电话";
				break;
				
			default:
				if(number.length()>=10&&number.startsWith("0")){//长途电话.
					String prefix3 = number.substring(1, 3);
					String prefix4 = number.substring(1, 4);
					Cursor cursor = db.rawQuery("select location from data2 where area = ?", new String[]{prefix3});
					if(cursor.moveToNext()){
						//xx电信 xx联通 
						String location = cursor.getString(0);
						address = location.substring(0, location.length()-2);
					}
					cursor.close();
					
					cursor = db.rawQuery("select location from data2 where area = ?", new String[]{prefix4});
					if(cursor.moveToNext()){
						//xx电信 xx联通
						String location = cursor.getString(0);
						address = location.substring(0, location.length()-2);
					}
					cursor.close();
				}
				break;
			}
			
			
		}
		db.close();
		return address;
	}
}
public class NumberQueryActivity extends Activity {
	private EditText et_number;
	private TextView tv_number_address;
	private Vibrator vibrator;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_number_query);
		et_number = (EditText) findViewById(R.id.et_number);
		tv_number_address = (TextView) findViewById(R.id.tv_number_address);
		vibrator= (Vibrator) getSystemService(VIBRATOR_SERVICE);
		
		//添加一个edittext的文本监听器
		et_number.addTextChangedListener(new TextWatcher() {
			
			/**
			 * 当文本变化的时候 
			 */
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				String address = AddressDao.getAddress(s.toString());
				tv_number_address.setText("归属地:"+address);
			}
			/**
			 * 在文本变化之前调用的方法
			 */
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				
			}
			/**
			 * 文本变化后
			 */
			@Override
			public void afterTextChanged(Editable s) {
				
			}
		});
		
	}
	
	//查询按钮的点击事件  震动也需要权限<uses-permission android:name="android.permission.VIBRATE" /> 否则vibrator.vibrate(Long.MaxValue);手机就要被震坏了
	public void query(View view){
		String number = et_number.getText().toString().trim();
		if(TextUtils.isEmpty(number)){
			Toast.makeText(this, "号码不能为空",1).show();
			 Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
			 et_number.startAnimation(shake);
			 //view.startAnimation(shake); 按钮也跟随震动 
			 vibrator.vibrate(300);
			return;
		}else{
			String address = AddressDao.getAddress(number);
			tv_number_address.setText("归属地:"+address);
		}
		
	}
}
;
		
原文:http://www.cnblogs.com/bravolove/p/4991296.html