SQLite根据wifi扫描创建多表的有关问题
SQLite根据wifi扫描创建多表的问题
有一个想法是通过WIFI扫描时,例如扫描到了20个wifi,然后能自动为每一个WIFI创建一张它的数据表。请教过老师说可以设置变量,利用wifi的MAC地址来唯一识别建表。后面在存储数据的时候把一个wifi的数据单独的存在那个表中。 不过不懂得怎么实现,求高手解答,能写写源码最好,讲的清楚点,我刚接触安卓
------解决思路----------------------
其实就是用MAC来做表名(当然MAC要变化一下。那个:是不能直接用在表名中的)。
主要代码:
private WifiManager wifiManager;
private List<ScanResult> scanResultsList;//放wifi扫描结果
private SQLiteDatabase db=null;//数据库
String tblName="";//表名,由MAC动态生成出来的。
BroadcastReceiver bcr=null;//获取扫描结果的Receiver
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
detectonbButton = (Button) findViewById(R.id.submit);//开始扫描wifi的按钮
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);//获取到WIFI服务
detectonbButton.setOnClickListener(new OnClickListener() {//当单击该按钮时,开始wifi 扫描
@Override
public void onClick(View v) {
wifiManager.startScan();//启动wifi扫描
}
});
//创建一个全局可用的数据库,文件名是:wifi_data.db
try {
db=this
.createPackageContext("你的包名全称", MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE)
.openOrCreateDatabase(this.getFilesDir()+"/wifi_data.db",Context.MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE,null );
}
catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
Toast.makeText(this, "创建数据库出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
return;
}
//获取wifi扫描结果的Receiver
//获取扫描结果
bcr=new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
{
//获取wifi的扫描结果
scanResultsList=wifiManager.getScanResults();
//对每一个wifi AP
for(int i=0;i<=scanResultsList.size()-1;i++)
{
//取出当前的wifi AP
ScanResult e=scanResultsList.get(i);
//获取它的MAC
String ssid=e.BSSID.trim().toLowerCase();//假设该MAC可直接做表名。否则要将其中的特殊符号:改为_。
tblName=ssid;//表名,由MAC动态生成出来的。
//在前边创建的db中,创建该表tblName,字段:id--主键。ssid-ap名称。level--wifi信号强度
String sql= "create table if not exists "
+tblName
+" ( id integer primary key autoincrement,ssid,level ) ";
//创建该表.表名,由MAC动态生成出来的。
try{
db.execSQL(sql);
}catch(Exception e){
Toast.makeText(MyActivity.this, "创建数据表出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
}
}//for
}//if
};
//将bcr注册,才能收到扫描结果的消息
this.registerReceiver(bcr, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}
有一个想法是通过WIFI扫描时,例如扫描到了20个wifi,然后能自动为每一个WIFI创建一张它的数据表。请教过老师说可以设置变量,利用wifi的MAC地址来唯一识别建表。后面在存储数据的时候把一个wifi的数据单独的存在那个表中。 不过不懂得怎么实现,求高手解答,能写写源码最好,讲的清楚点,我刚接触安卓
------解决思路----------------------
其实就是用MAC来做表名(当然MAC要变化一下。那个:是不能直接用在表名中的)。
主要代码:
private WifiManager wifiManager;
private List<ScanResult> scanResultsList;//放wifi扫描结果
private SQLiteDatabase db=null;//数据库
String tblName="";//表名,由MAC动态生成出来的。
BroadcastReceiver bcr=null;//获取扫描结果的Receiver
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
detectonbButton = (Button) findViewById(R.id.submit);//开始扫描wifi的按钮
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);//获取到WIFI服务
detectonbButton.setOnClickListener(new OnClickListener() {//当单击该按钮时,开始wifi 扫描
@Override
public void onClick(View v) {
wifiManager.startScan();//启动wifi扫描
}
});
//创建一个全局可用的数据库,文件名是:wifi_data.db
try {
db=this
.createPackageContext("你的包名全称", MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE)
.openOrCreateDatabase(this.getFilesDir()+"/wifi_data.db",Context.MODE_WORLD_READABLE
------解决思路----------------------
MODE_WORLD_WRITEABLE,null );
}
catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
Toast.makeText(this, "创建数据库出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
return;
}
//获取wifi扫描结果的Receiver
//获取扫描结果
bcr=new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
{
//获取wifi的扫描结果
scanResultsList=wifiManager.getScanResults();
//对每一个wifi AP
for(int i=0;i<=scanResultsList.size()-1;i++)
{
//取出当前的wifi AP
ScanResult e=scanResultsList.get(i);
//获取它的MAC
String ssid=e.BSSID.trim().toLowerCase();//假设该MAC可直接做表名。否则要将其中的特殊符号:改为_。
tblName=ssid;//表名,由MAC动态生成出来的。
//在前边创建的db中,创建该表tblName,字段:id--主键。ssid-ap名称。level--wifi信号强度
String sql= "create table if not exists "
+tblName
+" ( id integer primary key autoincrement,ssid,level ) ";
//创建该表.表名,由MAC动态生成出来的。
try{
db.execSQL(sql);
}catch(Exception e){
Toast.makeText(MyActivity.this, "创建数据表出错:"+e1.getMessage(), Toast.LENGTH_LONG).show();
}
}//for
}//if
};
//将bcr注册,才能收到扫描结果的消息
this.registerReceiver(bcr, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}