Android中手机号码归属地查询实现

这部分是昨天学习的,但是因为眼睛超负荷所以拖到现在,以后要合理规划时间。

目前手机里面的号码归属地查询主要是通过两种方式:1.联网查询,2.匹配本机归属地数据库。

我认为两种结合方式最好,在本地数据库中匹配不到的在进行联网查询,能大大增加匹配效果,并且不用过于增加本地数据库容量而增大安装包大小。

步骤:1.开启软件的时候把数据库从assets目录拷贝到files目录下,如果已存在,则不用重新拷贝。

2.实现界面。

3.实现工具类PhoneAddressUtils的getPhoneAddress()方法

4.在界面类activity里调用工具类方法得到地址兵显示出来。

首先是复制数据库的操作:

	private void copyDB() {
		File file = new File(getFilesDir(), "address.db");
		if(file.exists()&&file.length()>0) {
			Toast.makeText(this, "已经复制数据库", 0).show();
		} else {
			try {
				AssetManager am = getAssets();

				byte[] buffer = new byte[1024];
				InputStream is = am.open("address.db");
				FileOutputStream fis = new FileOutputStream(file);
				int len = 0;
				while((len=is.read(buffer))>0) {
					fis.write(buffer, 0, len);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

因为运行中工具类得不到assets目录下的文件,所以要在在开机启动的SplashActivity中把数据库拷贝到files目录下。

获得assert目录下的文件要用AssetManager对象的open()方法,打开文件返回输入流。

实现界面:就一个简单的输入框,按钮,显示框就行。

工具类:

package com.itheima.mobilesafe.db.dao;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class AddressDao {
	private static String path = "data/data/com.itheima.mobilesafe/files/address.db";
	public static String getAddress(String number) {

		String address = number;
		if(number.matches("^1[34568]\\d{9}$")) {
			String sql = "select location from data2 where id = (select outkey from data1 where id= ?)";
			SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
			Cursor cursor = database.rawQuery(sql, new String[] {number.substring(0, 7)});
			while(cursor.moveToNext()) {
				address = cursor.getString(0);
			}
			cursor.close();
			database.close();
		} else {
			address = "不是手机号码";
		}

		return address;
	}
}

调用显示:

点击按钮时:

public void queryAddress(View view) {
		String number = et_phone.getText().toString();
		String address = AddressDao.getAddress(number);
		et_address.setText(address);
	}

但是我们要动态的显示位置,所以要对输入框加一个TextChangedListener,当输入字符串大于3的时候,自动调用进行匹配显示出来。

et_phone.addTextChangedListener(new TextWatcher() {

			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				// TODO Auto-generated method stub
				if(s.length()>3) {
					String address = AddressDao.getAddress(s.toString());
					et_address.setText(address);
				}
			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub

			}

			@Override
			public void afterTextChanged(Editable s) {
				// TODO Auto-generated method stub

			}
		});

Android中手机号码归属地查询实现

时间: 2024-10-14 14:48:41

Android中手机号码归属地查询实现的相关文章

百度手机号码归属地查询api与返回json处理

前天无意间在网上看到百度ApiStore,然后好奇就进去看了看.正好最近在某博培训Android,刚学到java基础.抱着锻炼的心态选择手机号码归属地查询api进行练手.api地址 (http://apis.baidu.com/apistore/mobilephoneservice/mobilephone).百度官方已经给出请求示例 .我们只需要对请求结果json进行解析就可以. Java请求示例: 1 String httpUrl = "http://apis.baidu.com/apisto

Java调用免费的WebService示例【天气预报】【国内手机号码归属地查询】

1.免费的WebService地址:http://www.webxml.com.cn/zh_cn/index.aspx 提供了例如:天气预报,手机归属地查询等很多Web服务. 2.调用天气预报服务示例: 使用JDK自带的wsimport命令生成客户端代码: wsimport -keep http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 发现抛出如下异常: 后来在网上找到了http://blog.sina.com.cn/

【原创】Java实现手机号码归属地查询

网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷. 总结一下这些缺陷: 1.要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属地结果 2.提供接口的API,一般都要求付费,或者一天只有免费的限定查询次数 3.有些博客文档中的API已经过于老旧,尝试的时候,已经404Not Found的了 所以写篇博客,供正在做手机归属地查询的小伙伴参考. 思路: ->我找到一个拍拍网的接口,可以通过curl直接传手机号码来进行查询,并且会

本地的手机号码归属地查询-oracle数据

最近做的项目中,有个功能是手机归属地查询,因为项目要在内网下运行,所以不能用提供的webservice,只好在网上找手机归属地的数据,很多都是access的,我们的项目是用oracle,只好自己转吧,转过来的提供到网上,方便大家使用.数据还是比较新的,是2014年的. 下面是部分代码,如果需要全部代码,可以直接下载. TabMobileServiceImpl.java package com.zhouyu.service.impl; import java.util.List; import o

Android中由IP地址查询经纬度坐标的实例

大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的例子中演示的就是由58.192.32.1这个IP地址查询到其所在的经纬度坐标为(118.777802,32.061699). Java代码 package eoe.demo; import com.mapdigit.gis.DigitalMap; import com.mapdigit.gis.Ma

手机号码归属地查询免费api接口代码

根据手机号码查询用户的卡类型.运营商.归属地.区域等信息. 手机归属地实体类 package org.wx.xhelper.model; /** * 手机归属地 * @author wangxw * @version 1.0 * @date Jul 9, 2014 4:03:04 PM */ public class PhoneBelong { // 电话号码 private String phone; // 手机号码所在地区区号 private String area; // 号码卡类型 pr

java 手机号码归属地查询

下面是利用第三方接口实现手机号码归属地查询 (复制请标明出处或留言) package com.test.yyc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import ja

ajax手机号码归属地查询

<input ....手机号码框><input type="button" onclick="checkPhone()"> function checkPhone(){var zjsjhm = docunent.get...//获取手机号码if(searchAreaMobilePhoneFromIndex(zjsjhm)){//验证手机号 searchMobilePhoneGuiSuArea(zjsjhm);//查询手机归属地 }:} //验

手机号码归属地查询api接口

淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443参数: tel:手机号码 返回:JSON 拍拍 API地址: http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000&callname=getPhoneNumInfoExtCallback参数: mobile:手机号码