編輯:關於Android編程
Android 內置了很多系統級別的廣播。
廣播的注冊方式有兩種,一種是代碼注冊,另一種是在AndroidManifest.xml 中注冊。當然,前者稱為動態注冊,後者稱為靜態注冊。
下面我們就使用動態注冊來了解一下的廣播的注冊和使用。
創建一個工程BroadcastTest,在MainActivity中創建一個意圖過濾器,指定監測網絡狀態的action。
創建一個NetWorkReceiver類繼承BroadcastReceiver,重寫onReceive()方法。然後注冊廣播。代碼如下:
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetWorkReceiver netWorkReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//意圖過濾器
intentFilter = new IntentFilter();
//設置動作
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
//創建NetWorkReceiver對象
netWorkReceiver = new NetWorkReceiver();
//注冊廣播
registerReceiver(netWorkReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(netWorkReceiver);
}
class NetWorkReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this,"網絡發生變化了........",Toast.LENGTH_LONG).show();
}
}
}
運行程序,進去之後點擊Home鍵返回到桌面,記得不要點擊Back鍵,點擊Back鍵該應用程序就會銷毀。
到桌面之後點擊設置圖標,進入到流量控制的界面。如圖:
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
然後點擊關閉流量按鈕。效果如圖:
當然,為了更好的用戶體驗,需要提示用戶當前是否有網絡可用。所以修改NetWorkReceiver類中的代碼如下:
class NetWorkReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // Toast.makeText(MainActivity.this,"網絡發生變化了........",Toast.LENGTH_LONG).show(); ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isAvailable()) { Toast.makeText(MainActivity.this, "當前網絡可用。。。。。。。。。。。。。", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this, "當前網絡不可用。。。。。。。。。。。。", Toast.LENGTH_LONG).show(); } } }
由於這個會監聽網絡狀態,所以需要添加權限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
重新運行程序,然後進入到流量開關界面,點擊開關,效果如下:
以上就是通過動態注冊廣播來實現網絡狀態的監聽效果。
下面是一個手機電量監控的例子
創建工程BatteryTest,布局文件不懂,修改MainActivity代碼如下,和上述的步驟相似:
public class MainActivity extends AppCompatActivity { private BroadcastReceiver broadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.intent.action.BATTERY_CHANGED"); broadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { //當前電量 int currLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); //總電量 int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1); int percent = currLevel * 100 / total; Log.i("BroadcastReceiver", "剩余電量: " + percent + "%"); } }; registerReceiver(broadcastReceiver,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(broadcastReceiver); } }
運行程序,點擊模擬器右側的 ...按鈕,進入到Battery界面,如圖:
然後拖動電量條,Log顯示如下:
15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 99% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 95% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 93% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 91% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 89% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 86% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 84% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 81% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 78% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 75% 15439-15439/com.example.batterytest I/BroadcastReceiver: 剩余電量: 70%
至此,我們就完成了手機電量狀態的監聽。
使用了動態注冊,當然也需要使用靜態注冊來實戰一下。
我們就做一個開機啟動的功能,首先創建一個工程StartingUpTest,新建一個類StartingUpReceiver。 這裡我只是彈了一個吐司,當然你也在這裡實現開機啟動的功能。
public class StartingUpReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"我開機啟動了......",Toast.LENGTH_LONG).show(); } }
在AndroidManifest.xml文件中進行注冊。
<application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"> <category android:name="android.intent.category.LAUNCHER"> </category></action></intent-filter> </activity> <receiver android:name=".StartingUpReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"></action> </intent-filter> </receiver> </application>
別忘了權限喔。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
把程序運行到模擬器上,然後重啟模擬器,效果如下:
我們的這個開機啟動到這也就完成了。如有錯誤請指出,謝謝!
和大家一起分享一下學習經驗,如何實現Android文件下載進度顯示功能,希望對廣大初學者有幫助。先上效果圖: 上方的藍色進度條,會根據文件下載量的百分比進行加載,中部的
Android 百分比布局1.引入:compile com.android.support:percent:24.0.02.點開源碼可以看到,主要有兩個布局類Percen
Android小項目藍牙電子鐘 請支持原創,尊重原創,轉載請注明出處:http://blog.csdn.net/kangweijian(來自kangweijian的c
說到圖片,第一反映就是bitmap,那就先來認識一下bitmapBitmap是Android系統中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、