آموزش Wi- Fi اندروید
آموزش Wi- Fi اندروید
اندروید به برنامه ها اجازه می دهد تا در سطوح خیلی پایین به وضعیت وایرلس اتصالات دسترسی داشته باشند. برنامه می تواند تقریبا به تمام اطلاعات مربوط به اتصال Wi Fi دسترسی داشته باشد. این اطلاعات عبارتند از لینک شبکه ی اتصال، سرعت، آدرس IP، وضعیت انتقال و دیگر اطلاعات مربوط به شبکه می باشد. برنامه ها همچنین می توانند اتصالات Wi Fi را اسکن کنند، ذخیره کنند، اضافه کنند، به پایان برسانند و یا آغاز کنند.
اندروید WifiManager API را برای سازماندهی همه ی جنبه های اتصال Wi Fi ارائه می دهد. ما می توانیم این کلاس را با فراخوانی متد getSystemService، معرفی کنیم.کدهای آن در زیر ارائه شده است.
WifiManager mainWifiObj;
mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);
برای اسکن کردن لیستی از شبکه های وایرلس نیاز به ثبت BroadcastReceiver دارید، که می تواند به وسیله ی متد registerReceiver و شناسه ی شئ کلاس دریافت کننده ثبت شود. کدهای آن مانند زیر می باشد.
class WifiScanReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
}
}
WifiScanReceiver wifiReciever = new WifiScanReceiver();
registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
اسکن Wi Fi می تواند با فراخوانی متد startScan از کلاس WifiManager شروع شود. این متد لیستی از شئ های نتایج اسکن را ارائه می دهد. شما می توانید با فراخوانی متد get به هر شئ از لیست دسترسی داشته باشید. ترکیب مربوط به آن در زیر ارائه شده است.
List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
String data = wifiScanList.get(0).toString();
علاوه بر اسکن کردن، می توانید با استفاده از متد های تعریف شده در کلاس WifiManager، کنترل بیشتری بر روی wi fi خود داشته باشید. این متد ها در جدول زیر ارائه شده اند.
-
addNetwork(WifiConfiguration config)
این متد توصیفات یک شبکه ی جدید را به مجموعه ی شبکه های محدوده اضافه می کند.
-
createWifiLock(String tag)
این متد یک قفل جدید wi fi ایجاد می کند.
-
disconnect()
این متد اتصال فعال موجود را قطع می کند.
-
enableNetwork(int netId, boolean disableOthers)
این متد اجازه اتصال به یک شبکه سابقا موجود در محدوده را می دهد.
-
getWifiState()
این متد وضعیت فعال شده ی Wi fi را می گیرد.
-
isWifiEnabled()
این متد گزارش می دهد که آیا Wi Fi فعال است یا غیرفعال.
-
setWifiEnabled(boolean enabled)
این متد wi fi را فعال یا غیرفعال می کند.
-
updateNetwork(WifiConfiguration config)
این متد توضیخات مربوط به شبکه ی موجود در محدوده را آپدیت می کند.
مثال
در اینجا مثالی را می بینید که استفاده از Wi fi را توضیح می دهد. این مثال یک برنامه ی پایه ایجاد می کند که لیست شبکه های وایرلس را اسکن کرده و آنها را در یک لیست ویو قرار می دهد.
برای آزمایش این مثال باید آن را روی یک دستگاه واقعی اجرا کنید که در آن wi fi روشن می باشد.
-
برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان WIFI به عنوان بسته ی com.PRG.wifi نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDKو Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.
-
src/MainActivity.java را برای افزودن کد webview تغییر دهید.
-
res/layout/activity_main را برای افزودن مولفه های XML مربوطه تغییر دهید.
-
AndroidManifest.xml را برای افزودن اجازه های لازم تغییر دهید.
-
برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.
در زیر محتوای فایل تغییریافته ی MainActivity.java را مشاهده می کنید.
package com.PRG.wifi;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends Activity {
ListView lv;
WifiManager wifi;
String wifis[];
WifiScanReceiver wifiReciever;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView);
wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);
wifiReciever = new WifiScanReceiver();
wifi.startScan();
}
protected void onPause() {
unregisterReceiver(wifiReciever);
super.onPause();
}
protected void onResume() {
registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private class WifiScanReceiver extends BroadcastReceiver{
public void onReceive(Context c, Intent intent) {
List<ScanResult> wifiScanList = wifi.getScanResults();
wifis = new String[wifiScanList.size()];
for(int i = 0; i < wifiScanList.size(); i++){
wifis[i] = ((wifiScanList.get(i)).toString());
}
lv.setAdapter(new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,wifis));
}
}
}
در زیر محتوای تغییریافته ی xml مربوط به res/layout/activity_main.xmlرا مشاهده می کنید.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView android:text="Wifi" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"
android:textSize="35dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:id="@+id/textView"
android:layout_below="@+id/textview"
android:layout_centerHorizontal="true"
android:textColor="#ff7aff24"
android:textSize="35dp" />
<mageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/abc"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_below="@+id/imageView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="#fff5d376" />
</RelativeLayout>
در ادامه محتوای فایل AndroidManifest.xml می باشد.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.PRG.wifi" >
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
اجازه بدهید برنامه WIFI شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run از تولبار کلیک کنید.
دستگاه موبایل خود را به عنوان یک گزینه انتخاب کنید.
به اطلاعات وایرلس شبکه های اطراف خود توجه داشته باشد که شامل اطلاعات بیشتری در مورد هر شبکه ای که پیدا شده است می باشد.
- نوشته شده توسط سعید نوشادی
- بازدید: 5069