從0系統學Android--5.2 發送廣播

来源:https://www.cnblogs.com/sydmobile/archive/2020/03/11/12465212.html
-Advertisement-
Play Games

從0系統學Android 52 發送廣播 本系列文章目錄 : "更多精品文章分類" 本系列持續更新中.... 初級階段內容參考《第一行代碼》 5.3 發送自定義廣播 前面已經學習瞭如何接受廣播了,下麵來學習如何發送自定義廣播,廣播類型分為:標準廣播和有序廣播,下麵分別來說一下這兩種廣播如何發送。 5 ...


從0系統學Android--52 發送廣播


本系列文章目錄更多精品文章分類

本系列持續更新中.... 初級階段內容參考《第一行代碼》

5.3 發送自定義廣播

前面已經學習瞭如何接受廣播了,下麵來學習如何發送自定義廣播,廣播類型分為:標準廣播和有序廣播,下麵分別來說一下這兩種廣播如何發送。

5.3.1 發送標準廣播

首先我們先創建一個廣播接收器,用來接收我們發送的自定義廣播。

用靜態廣播來實現

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"接收到了",Toast.LENGTH_SHORT).show();
    }
}

   <receiver
            android:name="com.example.firstcode.fifty_chapter.norboardcast.MyReceiver"
            android:enabled="true"
            android:exported="true"
            android:permission="no">
            <intent-filter>
                <action android:name="com.my_broadcast"/>
            </intent-filter>
        </receiver>
                  
這裡 action 裡面寫自己要發送的廣播的名字就可以了

隨便在一個頁面添加發送代碼:

      buttonSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.my_broadcast");
                sendBroadcast(intent);

            }
        });

需要註意一點,上面的這種做法在 Android 8.0前是好用的,在 8.0 後進行了限制,限制通過靜態註冊來接受隱式廣播詳見 其實對於部分隱式廣播也是可以的比如開機廣播

通過這個限制我們可以得到解決辦法有兩種:

1.不通過靜態註冊接收器,通過動態註冊就可以了

2.通過靜態註冊接收器,但是發送的廣播不要是隱式的。

第一種很簡單,就是動態註冊,這裡不演示了,演示第二種:

 buttonSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.my_broadcast");
                // 明確指明要此廣播要發送給的組件
                intent.setComponent(new ComponentName(NetChangeActivity.this, MyReceiver.class));
                NetChangeActivity.this.sendBroadcast(intent);
           

            }
        });

由於廣播是通過 Intent 來進行傳遞的因此我們可以通過 Intent 來攜帶一些數據。

5.3.2 發送有序廣播

廣播是一種跨進程的通信,也就是說可以讓不同的應用程式進行通信

如何發送有序廣播呢?

 NetChangeActivity.this.sendOrderedBroadcast(intent,null);

這樣就是發送有序廣播了,第二個參數是與許可權有關,傳入 null 就可以了

那麼如何設置接收器接受的順序呢?

  <intent-filter android:priority="100">
                <action android:name="com.my_broadcast.MY_BROADCAST"/>
            </intent-filter>

通過 android:priority 來設置。同樣接收器在接收到消息後也可以通過 abortBroadcast() 來截取廣播,讓後面的接收器無法再接受到這條廣播。

5.4 使用本地廣播

前面我們發送和接受的廣播全部屬於系統全局廣播,也就是說這些廣播可以被系統中的其他應用程式接收到,並且我們也可以接受到來自其他任何應用的廣播。這樣容易引起安全問題。

為瞭解決這個問題,Android 引入了一套本地廣播機制,使用這個機制廣播只能夠在程式內部進行傳遞。其實實現很簡單就是通過 LocalBroadcastManager 來對廣播進行管理。

下麵我們就來列幾個方法就可以了

LocalBroadCastManager localBroadCastManager = LocalBroadCastManager.getInstance(this)// 獲取實例
// 發送廣播的時候
Intent intent = new Intent("com.broadcst.syd");
localBroadCastManager.senBroadCast(intent);

// 註冊廣播接收器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.broadcst.syd");
localBroadCastManager.registerReceiver(localReceiver,intentFilter);

// 取消註冊
localBroadCastManager.unregisterReceiver(localReceiver);

其實和之前動態註冊發送都是一樣的,只是換了一個類來執行而已。

本地廣播是無法通過靜態註冊的 ,這很好理解,靜態註冊是為了讓應用程式還沒有啟動就能接受廣播,而發送本地廣播的時候,程式肯定已經啟動了,因此完全不需要靜態註冊了。

註意這裡的本地指的是當前應用程式內

使用本地廣播優勢:

  • 明確的知道發送的廣播不會離開我們的應用程式,不用擔心泄漏信息。
  • 同樣其他廣播也無法發送到我們程式內部,不用擔心有安全漏洞。
  • 發送本地廣播比發送系統全局廣播將會更加高效

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第五章 欄位約束 初識約束 約束是資料庫用來確保數據滿足業務規則的手段,對數據做的條件限制。 約束的類型 1. 主鍵約束(PRIMARY KEY) 2. 唯一性約束(UNIQUE) 3. 非空約束(NOT NULL) 4. 檢查約束(CHECK) 5. 外鍵約束(FOREIGN KEY) 主鍵約束( ...
  • 第四章索引和事務 1. 什麼是索引?有什麼用? 1)索引是資料庫對象之一,用於加快數據的檢索,類似於書籍的目錄。在資料庫中索引可以減少資料庫程式查詢結果時需要讀取的數據量,類似於在書籍中我們利用索引可以不用翻閱整本書即可找到想要的信息。 2)索引是建立在表上的可選對象;索引的關鍵在於通過一組排序後的 ...
  • 第三章組函數和表關係 字元串函數 -- concat 連接兩個字元串 select concat('abc','ABC') from dual; select 'abc'||'ABC' from dual; select concat(first_name,'_')||last_name con,t ...
  • 第二章 Oracle體系架構和導入/導出 Oracle體繫結構 服務名,實例名,orcl n Oracle通過資料庫實例來載入和管理資料庫,每個運行的Oracle資料庫都對應一個Oracle實例(Instance),也可以稱為常式。 n 當資料庫伺服器上的一個資料庫啟動時,Oracle將為其分配一塊 ...
  • Oracle 與Mysql 對比: MySQL: 免費;小型企業;僅是資料庫;輕 Oracle:收費, 中大型企業;資料庫服務(許可權,併發,事務,一致性);更適合集群;重 共同點:都屬於關係型資料庫 RDBMS 非關係型資料庫NoSQL(Not Only SQL ): Redis,Mongodb,S ...
  • 查詢緩存: MySQL提供的數據緩存QueryCache,用於緩存SELECT查詢的結果 預設不開啟,需要在配置文件中開啟緩存(my.ini/my.cnf) 在[mysqld]段中,修改query_cache_type完成配置: 0:關閉 1:開啟,但是預設緩存,需要增加sql-no-cache提示 ...
  • 1.前言 有時候,我們需要把A庫A1表某一部分或全部數據導出到B庫B1表中,如果系統運維工程師沒打通兩個庫鏈接,我們執行T-SQL是處理數據導入時會發生如下錯誤: 這時候SQL Server導出功能很好彌補這一點,而該章節重點介紹該功能。 2.操作 資料庫版本:Microsoft SQL Serve ...
  • MySQL優化中,最重要的優化手段就是索引,也是最常用的優化手段 索引簡介: 索引:關鍵字與數據位置之間的映射關係 關鍵字:從數據中提取,用於標識,檢索數據的特定內容 目的:加快檢索 索引檢索為什麼快: (1)關鍵字相對於數據本身,量較小 (2)關鍵字都是排序好的 MySQL中索引的類型: 普通索引 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...