標籤:android http io os 使用 ar java 檔案 資料
(轉自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html)
九、Android學習第八天——廣播機制與WIFI網路操作
今天熟悉了Android中的廣播機制與WIFI網路的一些基本操作,總結如下:
我們知道廣播機制中,發送方不會關心接收方時候接收到資料或者如何去處理資料。
這裡總結下Android中BroadcastReceiver的註冊方法:
(一)在應用程式中進行註冊
(二)在Manifest.xml中進行註冊
如果在Manifest.xml中進行註冊,那麼該應用程式無論是開還是關,該應用都會收到廣播事件。例如:監聽電池耗電量等。顯而易見,這種註冊方法並不是我們想要的。
如果在應用程式中進行註冊,就會在Activity可見時進行註冊,不可見時就會取消註冊。
在Activity中進行註冊的代碼如下:
註冊:registerReceiver(BroadcastReceiver receiver,IntentFilter filter);
取消註冊:unregisterReceiver(BroadcastReceiver receiver);
如果一個BroadcastReceiver用於更新UI,那麼通常會使用在代碼中註冊的方法。
WIFI應該說是Android中比較重要的一塊了,用Android系統手機的童鞋們,應該每天都在接觸WIFI。
今天熟悉了如何對WIFI網卡進行基本的操作,包括開啟,關閉,檢測網卡狀態等等。
WIFI網卡的狀態是有一系列整型常量來表示的,如下:
(一)WIFI_STATE_DISABLED WIFI網卡不可用——1
(二)WIFI_STATE_DISABLING WIFI網卡正在關閉——0
(三)WIFI_STATE_ENABLED WIFI網卡可用狀態——3
(四)WIFI_STATE_ENABLING WIFI網卡正在開啟——2
(五)WIFI_STATE_UNKNOWN 未知網卡狀態——4
大家注意到了,每個狀態後我寫了一個數字,我們知道這些都是整型常量,所以後面的數字就是這些常量對應的值,如果大家在程式中,輸出當前當卡的狀態,就會看到這些數值,對應著某種網卡的狀態。
操作Android WIFI網卡狀態中,比較重要的是操作WIFI網卡需要的許可權,這個有很多。
我們在Android API中可以找到Manifest.permission類,就可以看到各種許可權了。
這裡貼出WIFI的一個例子,WIFI的這個例子只能在真機上面測試,因為模擬器沒有WIFI這樣的功能。
這裡比較重要的有三個檔案:
WIFITestActivity.java
main.xml
Manifest.xml
下面來看看這三個檔案中的具體代碼:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="WIFI" />
<Button
android:id="@+id/open"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="開啟wifi"
/>
<Button
android:id="@+id/close"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="關閉wifi"
/>
<Button
android:id="@+id/check"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="檢查wifi狀態"
/>
</LinearLayout>
WIFITestActivity.java
package mickey.wifi;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class WIFITestActivity extends Activity {
// 三個控制項對象
private Button open = null;
private Button close = null;
private Button check = null;
// 我們知道要對網卡進行操作,就需要WifiManager這個類
private WifiManager wifiManager = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 得到控制項對象的執行個體,並且為他們設定相應的監聽器
open = (Button) findViewById(R.id.open);
open.setOnClickListener(new OpenWifiListener());
close = (Button) findViewById(R.id.close);
close.setOnClickListener(new CloseWifiListener());
check = (Button) findViewById(R.id.check);
check.setOnClickListener(new CheckWifiListener());
}
// 為開啟網卡按鈕設定監聽器
class OpenWifiListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// 內部類如果直接使用this的話代表的是它自己,所以要用WIFITestActivity.this
// 得到WIFIManager對象
wifiManager = (WifiManager) WIFITestActivity.this
.getSystemService(Context.WIFI_SERVICE);
// setWifiEnabled(true) 開啟wifi網卡
wifiManager.setWifiEnabled(true);
// 得到當前網卡的狀態,這兒輸出的是一個整型常量
System.out.println("當前網卡的狀態為:" + wifiManager.getWifiState());
// 彈出一個Toast提示使用者當前wifi網卡的狀態是什麼,記得調用show方法
Toast.makeText(WIFITestActivity.this,
"當前wifi網卡的狀態為" + wifiManager.getWifiState(),
Toast.LENGTH_SHORT).show();
}
}
// 為關閉網卡按鈕設定監聽器
class CloseWifiListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// 得到WIFIManager對象
wifiManager = (WifiManager) WIFITestActivity.this
.getSystemService(Context.WIFI_SERVICE);
// 設定網卡不可用
wifiManager.setWifiEnabled(false);
System.out.println("當前網卡的狀態為:" + wifiManager.getWifiState());
Toast.makeText(WIFITestActivity.this,
"當前wifi網卡的狀態為" + wifiManager.getWifiState(),
Toast.LENGTH_SHORT).show();
}
}
// 為檢查網卡狀態按鈕設定監聽器
class CheckWifiListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// 得到WIFIManager對象
wifiManager = (WifiManager) WIFITestActivity.this
.getSystemService(Context.WIFI_SERVICE);
System.out.println("當前網卡的狀態為:" + wifiManager.getWifiState());
Toast.makeText(WIFITestActivity.this,
"當前wifi網卡的狀態為" + wifiManager.getWifiState(),
Toast.LENGTH_SHORT).show();
}
}
}
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mickey.wifi"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".WIFITestActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 這四個許可權一定要有,否則系統不會賦予使用者操作網路及網卡的許可權 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
</manifest>
然後童鞋們,把基於Android系統的手機用USB資料線串連到電腦,記得把USB調試開啟,然後運行你的程式,就會自動在手機上運行這個程式啦~
九、Android學習第八天——廣播機制與WIFI網路操作(轉)