当前位置: 代码迷 >> Android >> 【安卓札记】单机版手机归属地查询
  详细解决方案

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

热度:32   发布时间:2016-04-28 04:42:31.0
【安卓笔记】单机版手机归属地查询
既然是单机版,那么必然是查询本地数据库了,所以我们得准备一个离线数据库文件(下载地址: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);		}	}}

效果:





1楼RowandJJ13分钟前
不小心踩了自己一下......
  相关解决方案