A. android中怎麼打開Wifi的組播功能
打開Android中Wifi的組播功能。主要有以下幾個步驟:
在Manifest文件中加入:android.permission.CHANGE_WIFI_MULTICAST_STATE,這個許可權
獲取到MulticastLock對象,這個對象不能直接實例化,要通過WifiManager間接得到,工廠模式
調用MulticastLock對象的acquire方法,獲取到組播鎖
相應的,用完組播,為了不浪費電力,要調用MulticastLock的release方法釋放鎖
下面寫了個簡單示例,通過組播發現伺服器。
Activity寫的比較簡單
public class MulticastDemoActivity extends Activity {
MulticastLock multicastLock;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
allowMulticast();
try {
NetUtil.findServerIpAddress();
} catch (IOException e) {
throw new RuntimeException(e);
孫慶拿}
Log.d("multicast.demo", "find ip ok.");
multicastLock.release();
則搭}
private void allowMulticast(){
WifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
multicastLock=wifiManager.createMulticastLock("multicast.test");
multicastLock.acquire();
}
}
在Activity中打開和釋放組播鎖。使用組差亂播發送報文和接收ip地址信息的工具類代碼:
public class NetUtil {
private static final String TAG="Net.Utils";
private static final int MULTICAST_PORT=5111;
private static final String GROUP_IP="224.5.0.7";
private static byte[] sendData;
static{
sendData=new byte[4];
// 0xEE78F1FB
sendData[3] = (byte) 0xEE;
sendData[2] = (byte) 0×78;
sendData[1] = (byte) 0xF1;
sendData[0] = (byte) 0xFB;
}
public static String findServerIpAddress() throws IOException{
String ip=null;
MulticastSocket multicastSocket=new MulticastSocket(MULTICAST_PORT);
multicastSocket.setLoopbackMode(true);
InetAddress group = InetAddress.getByName(GROUP_IP);
multicastSocket.joinGroup(group);
DatagramPacket packet=new DatagramPacket(sendData, sendData.length,group,MULTICAST_PORT);
for(;;){
multicastSocket.send(packet);
Log.d(TAG,">>>send packet ok");
byte[] receiveData=new byte[256];
packet=new DatagramPacket(receiveData, receiveData.length);
multicastSocket.receive(packet);
String packetIpAddress=packet.getAddress().toString();
packetIpAddress=packetIpAddress.substring(1, packetIpAddress.length());
Log.d(TAG,"packet ip address: "+packetIpAddress);
StringBuilder packetContent=new StringBuilder();
for(int i=0;i<receiveData.length;i++){
if(receiveData[i]==0){
break;
}
packetContent.append((char)receiveData[i]);
}
ip=packetContent.toString();
Log.d(TAG,"packet content ip is: "+ip);
if(ip.equals(packetIpAddress)){
Log.d(TAG,"find server ip address: "+ip);
break;
}else{
Log.d(TAG,"not find server ip address, continue …");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
return ip;
}
}
B. 安卓手機怎麼連接隱藏wifi
若使用vivo手機,連接隱藏WiFi方法如下:
1、進入設置--WLAN,將「WLAN」選項開啟,並點擊「添加網路」;
2、輸入該隱藏WiFi的名稱和密碼,在安全性一欄選擇路由器的加密方式:一般路由器設置的是WPA/WPA2 PSK,沒有密碼的WiFi選擇「開放」;
3、設置完成准確的WiFi名稱、密碼和安全性後,點擊保存即可加入隱藏的WiFi網路。
若有更多疑問,可進入vivo官網/vivo商城APP--我的--在線客服或者vivo官網網頁版網頁鏈接-下滑底部--在線客服--輸入人工客服進入咨詢了解。
C. android manager wifi 怎麼用
獲取Wifi的控制類WifiManager。
WifiManager wm=(WifiManager)getSystemService(Context.WIFI_SERVICE);
接下來可以對wifi操作了,比如要打開、關閉wifi,可以通過WifiManager的setWifiEnabled()方法來開關wifi。
若要查看一些信息,可以通過getConnectionInfo()方法得到WifiInfo類的對象,WifiInfo類里主要提供手機wifi上面存儲的連接信息。
WifiInfo類方法:
1、getBSSID() 獲取接入點的mac地址(String)
2、getIpAddress() 獲取本機的IP地址 (int)
3、getLinkSpeed() 獲取連接速度(不是下載速度),單位為Mbps (int)
4、getMacAddress() 獲取mac地址 (String)
5、getNetworkId() 獲取網路id號。每一個設定好了的網路都有一個獨一無二的整數型ID號,用來識別網路,當操作請求時(翻譯)。簡而言之,就是這個號就是代表一個連接點,手機可以通過wifi連接很多無線網的。
6、getRssi() 返回收到的信號強度,是個負數。(好像到-113就表示一點信號都沒有,也就是說數越大信號就越好)
7、getSSID() 獲取無線信號提供者的名稱 (就是要連的網路的名字)(String)
上面那個類只能查到本機的mac地址與ip,要只查看本機的詳細信息,可以通過這個類:DhcpInfo df=wm.getDhcpInfo();
DhcpInfo類沒什麼方法,提供了一些欄位:
1、dns1 第一個DNS
2、dns2 如上
3、gateway 網關
4、ipAddress IP地址
5、netmask 子網掩碼
6、serverAddress 服務端地址(其實就是路由器ip,和網關一樣)
7、leaseDuration 和上面的getLinkSpeed() 方法的值接近,可能是連接速度,不過單位不是Mbps,getLinkSpeed() 得到72,這個欄位的值是7200
上面的IP與網關、子網掩碼等都是int型數值,直接看看不懂,附上一個我寫的方法把int轉成String類型。
private String intToString(int a){
StringBuffer sb=new StringBuffer();
int b=(a>>0)&0xff;
sb.append(b+".");
b=(a>>8)&0xff;
sb.append(b+".");
b=(a>>16)&0xff;
sb.append(b+".");
b=(a>>24)&0xff;
sb.append(b);
return sb.toString();
}
WifiConfiguration 類主要提供一個wifi配置的所有信息
有如下欄位(自己明白的不一定正確):
BSSID 接入點的mac地址。
SSID 接入點的名字。
networkId 網路號
preSharedKey WPA-PSK密碼,如果有就會得到一個*(這玩意就是判斷是不是有密碼的)
priority 優先順序
status 連接狀態,值是WifiConfiguration.Status中欄位的一種。
WifiConfiguration.Status 提供了3個欄位表示wifi連接的三種狀態
1.CURRENT 值為0,表示處於連接狀態
2.DISABLED 值為1,表示網路不可用
3. ENABLED 值為2,表示網路可用但沒連接
ScanResult wifi掃描到的接入點信息
1.BSSID
2.SSID
3.capabilities
4.frequency
5.level
關於接收WIFI狀態改變接收廣播信息:
ACTION: WifiManager.WIFI_STATE_CHANGED_ACTION ( "android.net.wifi.WIFI_STATE_CHANGED")wifi狀態變化觸發,觸發兩次。
可接收兩個信息:(鍵) (這個是監聽wifi狀態變化的,wifi狀態變化並不包括wifi的連接狀態,只是單純的指示wifi的5種狀態)
1. WifiManager.EXTRA_PREVIOUS_WIFI_STATE("previous_wifi_state") int型值 intent.getIntExtra("鍵",0);(第二個為得不到時的默認值)
2. WifiManager.EXTRA_WIFI_STATE("wifi_state") int型值 intent.getIntExtra("鍵",0);(第二個為得不到時的默認值)
ACTION: WifiManager.NETWORK_STATE_CHANGED_ACTION("android.net.wifi.STATE_CHANGE")wifi連接網路的狀態廣播,連接過程中接收多次,在連接過程中可與獲取NetworkInfo對象,通過ni.getState()可以獲取wifi連接狀態。如果連接state處於connected狀態,可以通過WifiManager.EXTRA_WIFI_INFO得到wifiInfo對象。(不重要細節:測試時發現 下面isconnected()方法為true時,這個廣播還處於connecting狀態,再一次廣播才變成connected)
可接收兩個信息:(鍵)
1. WifiManager.EXTRA_BSSID("bssid") String類型值 intent.getStringExtra("鍵")
2. WifiManager.EXTRA_NETWORK_INFO("networkInfo") T getParcelableExtra(「鍵」)
ACTION: WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION( "android.net.wifi.supplicant.CONNECTION_CHANGE") 判斷是否WIFI打開了,變化觸發一次
可接收一個信息:(鍵)(這個應該是廣播wifi啟動狀態的,true表示連接到wifi設備,一般在wifi state處於enable時得到,false則表示斷開設備連接,wifi此時狀態為disabling。這只是指機器內的wifi連接狀態變化,與網路無關)
1. WifiManager.EXTRA_SUPPLICANT_CONNECTED("connected") boolean類型返回值 intent.getBooleanExtra(「鍵」, true)第二個是默認值
ACTION: WifiManager.SUPPLICANT_STATE_CHANGED_ACTION("android.net.wifi.supplicant.STATE_CHANGE")發送WIFI連接的過程信息,如果出錯ERROR信息才會收到。連接WIFI時觸發,觸發多次。
可接收兩個信息:(鍵)
1. WifiManager.EXTRA_NEW_STATE("newState") intent.getParcelableExtra("鍵")
2. WifiManager.EXTRA_SUPPLICANT_ERROR("supplicantError") int型值 getIntExtra(「鍵」, int)
WIFI狀態int值對應的狀態:
WifiManager.WIFI_STATE_DISABLED ==1
WifiManager.WIFI_STATE_DISABLING ==0
WifiManager. WIFI_STATE_ENABLED==3
WifiManager. WIFI_STATE_ENABLING==2
WifiManager. WIFI_STATE_UNKNOWN==4
上面的是在有wifi的環境下測的,沒在沒WIFI的環境下測,不一定準,但差不多了。測試機型HTC G17。
如果在連接WIFI的過程中(Connecting),去連接網路地址(比如http://www..com)會得到找不到地址的異常,並且在8秒左右之內(就測了一台定製機),不能連接這一地址,否則報找不到地址異常。
這個包並不判斷網路連接狀態,只是判斷wifi的各種狀態,如果需要判斷網路狀態, 在android.net包中。ConnectivityManager 。
//判斷WIFI是否連接
private boolean isConnected(Context context){
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
System.out.println(ni.getState());
System.out.println(ni.getDetailedState()+"-----");
if(ni != null && ni.getState()==State.CONNECTED)
return true;
return false;
}
private boolean isWifiConected(Context context) {
WifiManager wm = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> list = wm.getConfiguredNetworks();
Iterator<WifiConfiguration> it = list.iterator();
while (it.hasNext()) {
WifiConfiguration wc = it.next();
if (wc.status == WifiConfiguration.Status.CURRENT)
return true;
}
return false;
}//2012.11.12在4.0機器上發現這個方法一直返回false,估計我理解錯了,不要用。
WifiInfo不為空並不代表這個類裡面就存了信息,getMacAdress可能為空。
public String getMac() {
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
if(wi == null)
return null;
return wi.getMacAddress();
}
D. Android該怎樣通過wifi得到廣播地址中的信息
這個號專用,得找專業人士解答啊
E. 安卓10開發wifi廣播太慢
信號不穩定喚殲轎。安卓10在開發wifi廣播時太慢可能是和肆因為信號不穩定,安卓10系統離無線路由器的距離有點遠,使得無線信號不穩定,從而導致改液導致網速非常的慢。
F. android wifi連接成功後會發送什麼廣播
1、拿您的手鍵棚此機,點設置。 2、進入設置頁面,選擇WLAN. 3、進入WLAN頁面,稿迅選擇更多選項。在菜單中和則選擇添加網路。 4、進入添加網路頁面,網路ssid就是網路名,當然你要知道你的網路名是什麼啦。 5、安全性一般選wpa/apa2psk。 6、接下來就輸入密碼啦,完成後點保存,這樣就可以了,手機是不是可以接上網路了呢
G. android wifi能進行udp的區域網廣播嗎,使用255.255.255.255這個地址~~~~
可以的,可以使用255.255.255.255進行廣播
H. android 4.1.1 連接wifi 不廣播
可能不支持吧
I. android 設備被設置為熱點模式,廣播地址是多少
一般是192.168.43.0/24既網關192.168.43.1廣播地址192.168.43.254
J. android監聽wifi狀態改變的廣播靠譜嗎
1、靠譜,這是android的基本常識!
2、只要wifi的底層驅動和wifi模塊沒有問題,廣播消息不會被其他應用堵塞下,監聽wifi狀態,都會收到wifi狀態改變的消息的!