【安卓笔记】单机版手机归属地查询

既然是单机版,那么必然是查询本地数据库了,所以我们得准备一个离线数据库文件(下载地址:http://download.csdn.net/detail/rowandjj/7660979).

步骤:

1.创建一个工具类打开数据库:

package cn.edu.chd.mobilesafe.db.dao;
import android.database.sqlite.SQLiteDatabase;
public class AddressDao
{
	public static SQLiteDatabase getAddressDB(String path)
	{
		return SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
	}
}

2.编写业务方法:

首先需要使用正则表达式判断号码是手机号码还是固定电话。若是手机号码则根据前面7位查询数据库。

若是固定电话,则先要判断固定电话的长度,分下面几种情况:

3位区号+7位号码

3位区号+8位号码

4位区号+7位号码

4位区号+8位号码

根据区号即可查出归属地

package cn.edu.chd.mobilesafe.engine;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import cn.edu.chd.mobilesafe.db.dao.AddressDao;
public class AddressService
{
	public static String getAddress(String number)
	{
		String city = number;
		SQLiteDatabase db = AddressDao.getAddressDB(Environment.getExternalStorageDirectory().getPath()+"/address.db");
		if(number.matches("^1[3458]\\d{9}$"))//手机号
		{
			if(db.isOpen())
			{
				Cursor cursor = db.rawQuery("select city from info where mobileprefix = ?", new String[]{number.substring(0, 7)});
				if(cursor.moveToNext())
				{
					city = cursor.getString(0);
				}
			}
			db.close();
		}else//固定电话
		{
			int len = number.length();
			switch (len)
			{
			case 4:
				city = "模拟器";
				break;
			case 7:
			case 8:
				city = "本地号码";
				break;
			case 10://3位区号+7位号码
				if(db.isOpen())
				{
					Cursor cursor = db.rawQuery("select city from info where area = ? limit 1", new String[]{number.substring(0, 3)});
					if(cursor.moveToNext())
					{
						city = cursor.getString(0);
					}
					db.close();
				}
				break;
			case 11://3位区号+8位号码,4位区号+7位号码
				if(db.isOpen())
				{
					Cursor cursor = db.rawQuery("select city from info where area = ? limit 1", new String[]{number.substring(0, 3)});
					if(cursor.moveToNext())
					{
						city = cursor.getString(0);
					}
					cursor = db.rawQuery("select city from info where area = ? limit 1", new String[]{number.substring(0, 4)});
					if(cursor.moveToNext())
					{
						city = cursor.getString(0);
					}
					db.close();
				}
				break;
			case 12:
				if(db.isOpen())
				{
					Cursor cursor = db.rawQuery("select city from info where area = ? limit 1", new String[]{number.substring(0, 4)});
					if(cursor.moveToNext())
					{
						city = cursor.getString(0);
					}
					db.close();
				}
				break;
			}
		}
		if(db.isOpen())
		{
			db.close();
		}
		return city;
	}
}

3.调用业务类,查询手机归属地信息:

由于是数据库操作,所以使用了AsyncTask进行异步查询。

package cn.edu.chd.mobilesafe.ui;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import cn.edu.chd.mobilesafe.R;
import cn.edu.chd.mobilesafe.engine.AddressService;
public class QueryNumberActivity extends Activity
{
	private Button but_query = null;
	private EditText et_number = null;
	private TextView tv_show = null;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.query_number);
		but_query = (Button) findViewById(R.id.but_query_p);
		et_number = (EditText) findViewById(R.id.et_query_p);
		tv_show = (TextView) findViewById(R.id.tv_show_p);
		but_query.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				String text = et_number.getText().toString();
				if(text.trim().equals(""))
				{
					Toast.makeText(QueryNumberActivity.this,"号码不能为空",0).show();
				}else
				{
					//异步查询数据库,获得归属地信息显示到txetview上
					new QueryNumberTask().execute(text);
				}
			}
		});
	}

	public class QueryNumberTask extends AsyncTask<String, Void, String>
	{
		@Override
		protected String doInBackground(String... params)
		{
			String number = params[0];
			//查询数据库,获取归属地信息
			return AddressService.getAddress(number);
		}
		@Override
		protected void onPostExecute(String result)
		{
			tv_show.setText(result);
		}
	}
}

效果:

【安卓笔记】单机版手机归属地查询

时间: 2024-12-23 12:24:18

【安卓笔记】单机版手机归属地查询的相关文章

手机归属地查询

手机归属地查询 效果图: 分析: 1.传递多个参数,用一个类就好 2.打开数据库 private SQLiteDatabase database; database=SQLiteDatabase.openOrCreateDatabase(file, null); file是数据库的路径 3.在逻辑中多加判断 比如是否获取到正确的手机号 比如我们操作的字符串是否为空 比如时候获取正确参数 4.通过文件流来实现释放APK中包中的数据库文件到手机本地 5.需要用的数据库放在assets目录中 buff

谈谈WebService开发-应用篇(一)---手机归属地查询

接续上一篇WebService基础,这里介绍一些常用应用的开发,主要是让大家练练手.后续还会介绍以后工作中常用的开发方式,采用CXF.AXIS2等第三方框架进行开发. 相信大家经常能看到一些网站有有手机归属地查询.天气预报等信息,那么这些信息是哪里来的呢?实际上是有一些单位提供了免费的webservice服务,那么哪里可以查到这些免费服务呢,大家可以到  Web服务(免费) 查询到不少免费的webservice服务,也可以访问这篇博文常用免费Webservice服务列表,里面收集了不少常用的免费

手机归属地查询api

手机归属地查询:可以查询到手机号码是哪的,属于移动,联通,还是电信等一系列情况.? 详情:?http://www.haoservice.com/docs/14 示例: { "error_code": "0", "reason": "Return Successd!", "result": { "province": "浙江", "city": &q

PHP学习笔记:利用百度api实现手机归属地查询

从来没有用过api,都不知道怎么获得api的数据,跟着demo,然后修改,终于实现了手机号码查询的功能,代码和说明很全,大家试试. <?php /** * Created by jianqingwang * User: Administrator * Date: 2016/9/10 0010 * Time: 22:49 * 查询手机归属地 */ header("Content-type: text/html; charset=utf-8"); //传入查询的电话 //$phone

手机归属地查询演示代码

手机归属地演示代码示例 申请key值(http://www.haoservice.com/docs/14 )后输入要查手机号就可以用了,刚测试完,没问题. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using

手机归属地查询(云平台开发)

概要 本章主要简示了使用聚合云API获取指定手机号的归属地信息,这次找了个可以免费查询很多次的平台.开发主要根据聚合的官方文档,由于获取的查询结果是Json格式,所以涉及到了Json解析,但现在的IOS开发内置了Json解析库,所以事情就简单多了. 结果展示 流程概要 1.在聚合云平台上注册账号并创建应用,下载对应的SDK 2.查看SDK文档,根据文档描述创建应用添加头文件.库.框架,官当文档描述如下: 将JuheApisSDK.a以及头文件"include"文件夹添加到自己的工程中来

【ADO.NET】5、手机归属地查询( winfrom )

using System.IO; 有一个数据库手机号码的txt文件,格式是 : 13500000000-13560000000-中国移动 查询结果: 湖南移动[邵阳]文件夹选择对话框 FolderBrowserDialog; string[] Directory.GetFiles(路径,类型,选项) //按照通配符搜索目录下的文件 Path.GetFileNameWithoutExtension(文件名) //得到文件名(不要扩展名)Path.Combine(路径1,路径2) //合并两个路径P

安卓开发-webservice-号码归属地查询

代码下载地址:http://download.csdn.net/detail/jiangliqing1234/8027039 过程详细讲解:http://blog.csdn.net/lyq8479/article/details/6428288#reply 如果用的soap版本过高,其中主线程处理: http://blog.csdn.net/jediael_lu/article/details/12505535 http://www.2cto.com/kf/201310/248730.html

微信公众平台开发(35)(天气预报、股票查询、手机归属查询、在线听音乐、翻译、成绩查询功能)代码分享

微信公众平台开发应用(天气预报.股票查询.手机归属查询.在线听音乐.翻译.成绩查询功能) 原文: http://www.cnblogs.com/imaker/p/5491433.html 1.xml(信息返回用扩展语言XML来传递值) $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr