Broadcasts (廣播) 靜宜大學資管系 楊子青

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
第 5 章 流程控制 (一): 條件分支.
第二章 JAVA语言基础.
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
ArrayAdapter & Spinner
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
實驗四:單位轉換程式.
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
程式設計實作.
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
MIT App Inventor簡介及 「Hello World」程式初體驗 靜宜大學資管系 楊子青
使用Android控制Arduino 史先强
HelloPurr 靜宜大學服務學習發展中心、資管系 楊子青
第10章 App微信分享的实现 倚动实验室.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.
Working with Databases (II) 靜宜大學資管系 楊子青
Chapter 6 進階UI設計.
第4章 Android生命周期.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
Java语言程序设计 第五部分 Java异常处理.
實驗十四:顯示與控制地圖.
第2讲 移动应用开发基础知识(二) 宋婕
Android App簡介及 App Inventor 2體驗 靜宜大學資管系 楊子青
Bluetooth (藍牙) 靜宜大學資管系 楊子青
生活智慧王 樹德科技大學 資訊工程系 指導教授 : 陳毓璋 教授 小組成員: 劉上緯 翁維廷 洪文財.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
App Inventor 2初體驗 靜宜大學資管系 楊子青
Android Application Component
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
補間動畫 (Tween Animation) 靜宜大學資管系 楊子青
HelloPurr_Extend 靜宜大學資管系 楊子青
App Inventor 2體驗 及呼叫PHP程式存取資料庫 靜宜大學資管系 楊子青
第二章 Java语法基础.
螢幕觸控及手勢辨別 靜宜大學資管系 楊子青.
CustomView(自定義視圖) 、 畫布、顏色及多點觸控 靜宜大學資管系 楊子青
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
Text To Speech (TTS, 文字轉 語音)、讀簡訊 靜宜大學資管系 楊子青
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
第二章 Java基本语法 讲师:复凡.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
打Mole不打Ladybug (IV): 讓使用者控制Ladybug移動 靜宜大學資管系 楊子青
Android Speech To Text(STT)
Android Studio 程式設計基礎 靜宜大學資管系 楊子青
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第2章 Java语言基础.
第9章 BroadcastReceiver的使用
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
加速感測器 靜宜大學資管系 楊子青.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
SQLite資料庫 靜宜大學資管系 楊子青.
Part 8 Broadcast Receiver、Service和App Widget
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

Broadcasts (廣播) 靜宜大學資管系 楊子青

1. 廣播? http://brianchen85.blogspot.com/2015/01/android-broadcastreceiver.html 1.整個手機是一個校園 2.學校有事情找學生,會運用廣播 3.要能聽到廣播,教室需安裝喇叭才聽得到 4.廣播可能不是呼叫全校學生,例如:資管二A王小明 5.王小明聽到廣播,才會到指定的地方

Android的廣播事件? http://www.codedata.com.tw/mobile/android-tutorial-the-5th-class-1-broadcastreceiver-alarmmanager 在系統或其他應用程式發生一些事件時,通知需要的應用程式執行一些指定的工作。 例如裝置在接到來電的時候,系統會發出一個來電的廣播事件 常見的系統廣播事件如:系統開機程序完成、裝置電量過低、時區改變、插入耳機、螢幕開啟或關閉、應用程式安裝完成或移除等

Android broadcast Intent list https://stackoverflow.com/questions/4031740/where-is-the-all-android-broadcast-intent-list 本教學使用實例: android.media.VOLUME_CHANGED_ACTION (音量改變) android.net.wifi.WIFI_STATE_CHANGED (Wifi狀態改變)

2. 建立一專案BroadCast (接收系統廣播) Empty Activity 新增一個Java Class,當作「廣播接收器」 例如命名為TestBroadcastReceiver,繼承BroadcastReceiver

TestBroadcastReceiver需實作onReceive方法(接收到廣播訊息後之處理)

TestBroadcastReceiver.java的onReceive方法之程式碼 public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){ int newVolume = intent.getIntExtra("android.media.EXTRA_VOLUME_STREAM_VALUE", 0); int oldVolume = intent.getIntExtra("android.media.EXTRA_PREV_VOLUME_STREAM_VALUE", 0); if (newVolume != oldVolume) { Toast.makeText(context, " 音量大小調整為 : " + newVolume, Toast.LENGTH_SHORT).show(); } else if(intent.getAction().equals("android.net.wifi.WIFI_STATE_CHANGED")) { Toast.makeText(context, "Wifi狀態改變", Toast.LENGTH_SHORT).show();

MainActivity.java的程式碼 (註冊廣播訊息) protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter intentFilter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION"); intentFilter.addAction("android.net.wifi.WIFI_STATE_CHANGED"); registerReceiver(new TestBroadcastReceiver(), intentFilter); }

轉成apk,安裝到手機或雷電模擬器測試看看

獲取更多Wifi狀態訊息: 修改TestBroadcastReceiver.java public void onReceive(Context context, Intent intent) { … else if(intent.getAction().equals("android.net.wifi.WIFI_STATE_CHANGED")) { String msg =""; int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: msg = "wifi已開啟"; break; case WifiManager.WIFI_STATE_ENABLING: msg = "wifi開啟中..."; break; case WifiManager.WIFI_STATE_DISABLED: msg = "wifi已關閉"; break; case WifiManager.WIFI_STATE_DISABLING: msg = "wifi關閉中..."; break; } Toast.makeText(context, "Wifi狀態改變:" + msg, Toast.LENGTH_SHORT).show();

轉成apk,安裝到手機或雷電模擬器測試看看

自行練習:藍牙(需安裝至手機測試) 偵測藍牙狀態變動之系統廣播名稱 判斷藍牙狀態 需允許權限 android.bluetooth.adapter.action.STATE_CHANGED 判斷藍牙狀態 int BluetoothState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); BluetoothAdapter.STATE_TURNING_ON:"藍牙開啟中... " BluetoothAdapter.STATE_ON:"藍牙已開啟" BluetoothAdapter.STATE_TURNING_OFF:"藍牙關閉中..." BluetoothAdapter.STATE_OFF:"藍牙已關閉" 需允許權限 <uses-permission android:name="android.permission.BLUETOOTH" />

3.自訂廣播 改成LinearLayout,加入3個按鈕(註冊/發送/解除),在onClick屬性分別填入reg, send, unreg

修改TestBroadcastReceiver.java public void onReceive(Context context, Intent intent) { … else{ Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show(); }

修改MainActivity.java public class MainActivity extends AppCompatActivity { TestBroadcastReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); receiver = new TestBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION"); intentFilter.addAction("android.net.wifi.WIFI_STATE_CHANGED"); registerReceiver(receiver, intentFilter); }

修改MainActivity.java (註冊與發送) public void reg(View v){ IntentFilter intentFilter = new IntentFilter("tw.edu.pu.csim.tcyang.broadcast.MyRegister"); registerReceiver(receiver, intentFilter); } public void send(View v){ Intent intent =new Intent("tw.edu.pu.csim.tcyang.broadcast.MyRegister"); sendBroadcast(intent); 前面是此專案的package 自訂名稱

修改MainActivity.java (解除) public void unreg(View v){ try{ unregisterReceiver(receiver); Toast.makeText(MainActivity.this,"廣播接收器已解除", Toast.LENGTH_SHORT).show(); } catch(Exception exception) { Toast.makeText(MainActivity.this,"先前已經解除廣播接收器了喔", Toast.LENGTH_SHORT).show(); 轉成apk,安裝後測試模擬看看

4.判斷是否連上網路的廣播 開啟新的專案,例如NetworkCheck Empty activity AndroidManifest.xml加入以下存取權限: <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 新增Java Class,例如命名為NetworkCheckReceiver,繼承BroadcastReceiver

NetworkCheckReceiver.java public void onReceive(Context context, Intent intent) { //判斷是否有網路連線 ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); String status = null; if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) { status = "網路連線中:"; if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { status += "Wifi已啟用"; } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE){ status += "行動數據已啟用"; } else{ status = "無網路連線"; Toast.makeText(context, status, Toast.LENGTH_LONG).show();

MainActivity.java(註冊系統廣播) protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(new NetworkCheckReceiver(), intentFilter); }