android wifi 调试开发问题。

Android WIFI开发介绍.pdf_Linux下载_Linux公社-Linux系统门户网站
你好,游客
Android WIFI开发介绍.pdf
来源:Linux社区&
作者:Linux
WIFI开发介绍:
WifiStateTracker 会创建WifiMonitor 接收来自底层的事件,WifiService 和WifiMonitor 是整个模块的核心。WifiService 负责启动关闭wpa_supplicant、启动关闭WifiMonitor 监视线程和把命令下发给wpa_supplicant,而WifiMonitor 则负责从wpa_supplicant 接收事件通知。
当wpa_supplicant 成功连接上AP 之后,它会向控制通道发送事件通知连接上AP 了,从而wifi_wait_for_event 函数会接收到该事件,由此WifiMonitor 中的MonitorThread 会被执行来出来这个事件,
部分代码:
case EVENT_DHCP_SUCCEEDED:mWifiInfo.setIpAddress(mDhcpInfo.ipAddress);setDetailedState(DetailedState.CONNECTED);intent = newIntent(WifiManager.NETWORK_STATE_CHANGED_ACTION);intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, mNetworkInfo);mContext.sendStickyBroadcast(intent);
免费下载地址在
用户名与密码都是
具体下载目录在 /2011年资料/Android入门教程/Android WIFI开发介绍/
相关资讯 & & &
& (05月04日)
& (01月20日)
& (06月21日)
& (02月10日)
& (11/01/:38)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款对于android上GPS的控制,官方提供了相关的API&Settings.Secure.setLocationProviderEnabled(getContentResolver(),&LocationManager.GPS_PROVIDER,&true);&&但是当我们调用setLocationProviderEnabled方法后,系统会抛出异常提示需要android.permission.WRITE_SECURE_SETTINGS的权限,即便在mainfest中添加该权限的请求也是一样。setLocationProviderEnabled这个方法需要root的权限,要使这个代码能执行,程序就必须是系统的app,即安装在/system/app下;或者是请求root权限,这样除了厂商能将自己的app安装在/system/app 之下外,只能是需要请求root权限了。&&百度了一下,有解决办法,但是说的不太清除,而且直接copy他们的代码,运行后gps状态也没有改变。而且也没有说明其原理。&其实除了使用&&Settings.Secure.setLocationProviderEnabled 这个方法之外,还有一个方法就是使用系统自带的电量控制Widget来更改GPS的状态。&具体代码如下:&&Intent&intent&=&new&Intent();intent.setClassName("com.android.settings",&"com.android.settings.widget.SettingsAppWidgetProvider");intent.addCategory("android.intent.category.ALTERNATIVE");intent.setData(Uri.parse("custom:3"));context.sendBroadcast(intent);&&&这段代码是什么意思呢?其实就是通过intent将消息发给com.android.settings.widget.SettingsAppWidgetProvider去处理,因为这个是系统自带的程序,所以他拥有root权限。&那&Uri.parse("custom:3") 又是什么意思呢,其实custom:3就是电量控制插件上对应的各个按钮,通过查看改代码可以知道各个id的情况&private&static&final&int&BUTTON_BLUETOOTH&=&4;private&static&final&int&BUTTON_BRIGHTNESS&=&1;private&static&final&int&BUTTON_GPS&=&3;private&static&final&int&BUTTON_SYNC&=&2;private&static&final&int&BUTTON_WIFI&=&0;&&这样就可以通过给&com.android.settings.widget.SettingsAppWidgetProvider 发送消息实现更改GPS状态了。同时,更改其他系统设设置的状态也可以通过这个方法实现。&&接下来控制WIFI的开关就很容易了,只要简单调用一下代码就可以实现了&WifiManager&manager&=null;manager&=&(WifiManager)context.getSystemService(Context.WIFI_SERVICE);manager.setWifiEnabled(false);manager.setWifiEnabled(true);&&&&控制蓝牙的开关BluetoothAdapter&bluetoothadapter&=&BluetoothAdapter.getDefaultAdapter();bluetoothadapter.disable();bluetoothadapter.enable();&&控制飞行模式,谷歌没有提供相关的api,但是我们可以通过intent广播来实现&Intent&Settings.System.putInt(context.getContentResolver(),&Settings.System.AIRPLANE_MODE_ON,&enabled&?&1&:&0);intent&=&new&Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);intent.putExtra("state",&enabled);context.sendBroadcast(intent);&这样,我们就完成了情景模式中控制GPS/WIFI/蓝牙/飞行模式 的功能。&&&&
阅读(...) 评论()
心·就在你曾经来到过的地方本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助Android开发之WIFI网络操作
Android应用程序有时候需要对WIFI网卡进行操作,从而操作WIFI网络。
WIFI网卡有一些状态,由一系列的整形常量来表示。
WIFI_STATE_DISABLED
WIFI网卡不可用
WIFI_STATE_DISABLING
WIFI正在关闭
WIFI_STATE_ENABLED
WIFI网卡可用
WIFI_STATE_ENABLING
WIFI网卡正在打开
WIFI_STATE_UNKNOWN
未知网卡状态
在应用程序中操作WIFI网卡一定的权限。
WIFI 的主要操作权限有四个:
CHANGE_NETWORK_STATE :允许修改网络状态的权限。
CHANGE_WIFI_STATE :允许修改 WIFI 状态的权限。
ACCESS_NETWORK_STATE :允许访问网络状态的权限。
ACCESS_WIFI_STATE :允许访问 WIFI 状态的权限。
在AndroidManifest.xml文件中添加权限。
&uses-permission
android:name="android.permission.CHANGE_NETWORK_STATE"&&/uses-permission&
&uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"&&/uses-permission&
&uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"&&/uses-permission&
&uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"&&/uses-permission&
改变WIFI网卡的状态
对WIFI网卡进行操作需要通过WifiManager对象来进行,获取该对象的方法如下:
WifiManager
wifiManger=(WifiManger)Context.getSystemService(Service.WIFI-SERVICE);
打开WIFI网卡
wifiManager.setWifiEnabled(true);
关闭WIFI网卡
wifiManager.setWifiEnabled(false);
获取网卡当前的状态
wifiManager.getWifiState();
获取网卡的配置信息
wifiManager.getConfiguredNetworks();
如果要进入Android系统自带的WIFI配置界面,则用:
ACTION_WIFI_IP_SETTINGS WIFI的IP设置界面
ACTION_WIFI_SETTINGS WIFI设置界面
ACTION_WIRELESS_SETTINGS 网络设置界面
startActivityForResult(new
Intent(android.provider.Settings.ACTION_WIFI_SETTINGS ), 0);
进入Android系统的设置界面:
intent.setAction(Intent.ACTION_VIEW);
intent.setClassName("com.android.settings",
"com.android.settings.Settings");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
下面是程序实例:
package net.feibin.
import java.util.L
import android.app.A&
import android.content.C&
import android.content.I
import android.net.wifi.WifiC
import android.net.wifi.WifiM&
import android.os.B&
import android.util.L
import android.view.V&
import android.view.View.OnClickL&
import android.widget.B&
import android.widget.TextV
import android.widget.T&
public class WifiTest extends Activity {&
&&& private
Button startButton=&
&&& private
Button stopButton=&
&&& private
Button checkButton=
&&& private
Button manageButton=
&&& private
Button choiceButton=
&&& private
&&& WifiManager
wifiManager=&
@Override&
&&& public void
onCreate(Bundle savedInstanceState) {&
super.onCreate(savedInstanceState);&
setContentView(R.layout.main);&
startButton=(Button)findViewById(R.id.startButton);&
stopButton=(Button)findViewById(R.id.stopButton);&
checkButton=(Button)findViewById(R.id.checkButton);
manageButton=(Button)findViewById(R.id.manageButton);
choiceButton=(Button)findViewById(R.id.choiceButton);
tv=(TextView)findViewById(R.id.tv);
startButton.setOnClickListener(new
startButtonListener());&
stopButton.setOnClickListener(new
stopButtonListener());&
checkButton.setOnClickListener(new checkButtonListener());
manageButton.setOnClickListener(new Button.OnClickListener()
&&&&&&&&&&&
public void onClick(View v) {
&&&&&&&&&&&
&wifiManager=(WifiManager)WifiTest.this.getSystemService(Context.WIFI_SERVICE);
&&&&&&&&&&&&&&&
List&WifiConfiguration&
networks=wifiManager.getConfiguredNetworks();
&&&&&&&&&&&&&&&
tv.setText(String.valueOf(networks));
&&&&&&&&&&&
&&&&&&&&&&&
choiceButton.setOnClickListener(new Button.OnClickListener()
&&&&&&&&&&&
public void onClick(View v) {
&&&&&&&&&&&
&WifiManager wifi = (WifiManager)
getSystemService(Context.WIFI_SERVICE);
&&&&&&&&&&&
&WifiConfiguration wc = new
WifiConfiguration();
&&&&&&&&&&&&
//在网络中添加新的的WIFI AP并连接
&&&&&&&&&&&wc.SSID
= "\"SSIDName\"";
&&&&&&&&&&&wc.preSharedKey&
= "\"password\"";
&&&&&&&&&&&wc.hiddenSSID
&&&&&&&&&&&wc.status
WifiConfiguration.Status.ENABLED;&&&&&&&&
&&&&&&&&&&&wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
&&&&&&&&&&&wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
&&&&&&&&&&&wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
&&&&&&&&&&&wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
&&&&&&&&&&&wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
&&&&&&&&&&&wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
&&&&&&&&&&&int
wifi.addNetwork(wc);&&&&&&&&&&&
&Log.d("WifiPreference", "add Network returned " +
&&&&&&&&&&&
&boolean b = wifi.enableNetwork(res,
true);&&&&&&&
&&&&&&&&&&&
&Log.d("WifiPreference", "enableNetwork returned "
&&&&&&&&&&&&&&&
tv.setText(String.valueOf(b));
&&&&&&&&&&&&&&&
Log.d("WifiPreference", "enableNetwork returned " + b );
&&&&&&&&&&&
&&&&&&&&&&&
startButtonListener implements
OnClickListener&
@Override&
public void onClick(View v) {&
&&&&&&&&&&&
// TODO Auto-generated method
&&&&&&&&&&&
wifiManager=(WifiManager)WifiTest.this.getSystemService(Context.WIFI_SERVICE);&
&&&&&&&&&&&
wifiManager.setWifiEnabled(true);&
&&&&&&&&&&&
System.out.println("wifi state
---&"+wifiManager.getWifiState());&
&&&&&&&&&&&
Toast.makeText(WifiTest.this,
"当前网卡状态为:"+wifiManager.getWifiState(),
Toast.LENGTH_SHORT).show();
&&&&&&&&&&&
startActivityForResult(new
Intent(android.provider.Settings.ACTION_WIFI_SETTINGS),0);
stopButtonListener implements
OnClickListener&
@Override&
public void onClick(View v) {&
&&&&&&&&&&&
// TODO Auto-generated method
&&&&&&&&&&&
wifiManager=(WifiManager)WifiTest.this.getSystemService(Context.WIFI_SERVICE);&
&&&&&&&&&&&
wifiManager.setWifiEnabled(false);&
&&&&&&&&&&&
System.out.println("wifi state
---&"+wifiManager.getWifiState());&
&&&&&&&&&&&
Toast.makeText(WifiTest.this,
"当前网卡状态为:"+wifiManager.getWifiState(),
Toast.LENGTH_SHORT).show();&
checkButtonListener implements
OnClickListener&
@Override&
public void onClick(View v) {&
&&&&&&&&&&&
// TODO Auto-generated method
&&&&&&&&&&&
wifiManager=(WifiManager)WifiTest.this.getSystemService(Context.WIFI_SERVICE);&&&&&&&&&&&
&&&&&&&&&&&
System.out.println("wifi state
---&"+wifiManager.getWifiState());&
&&&&&&&&&&&
Toast.makeText(WifiTest.this,
"当前网卡状态为:"+wifiManager.getWifiState(),
Toast.LENGTH_SHORT).show();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 android打开wifi 的文章

 

随机推荐