當前位置:首頁 » 安卓系統 » android屏幕廣播

android屏幕廣播

發布時間: 2023-04-16 17:25:52

1. 手機播放器如何投屏到電視上,更好地體驗心儀的劇呢

首先要注意的是,所有截屏視頻都需要在同一WiFi環境中使用手機和電視。如果電視不支持聯網或WiFi,則不讓畝鄭允許這樣做。

您還可以使用第三方屏幕投射工具在屏幕上簡單地顯示軟體,以便在手機和電視上安裝應用程序細分和電視終端,並將這兩個手機配對會將手機的內容發送到電視。根據我的經驗,我認為它具有豐富的整體功能,但是由於延遲時間相當長,我建議所有人都使用前兩種方法。

2. android 之廣播機制

Android 中的廣播主要可以分為兩種類型:標准廣播和有序廣播

一種完全非同步執行的廣播,在廣播發出之後,所有的BroadcastReceiver幾乎會在同一時刻收到這條廣播消息,因此它們之間沒有任何先後順序可言。這種廣播的效率會比較高,但同時也意味著它是無法被截斷

標准廣播工作示意圖:

一種同步執行的廣播,在廣播發出之後,同一時刻只會有一個BroadcastReceiver能夠收到這條廣播消息,當這個BroadcastReceiver中的邏輯執行完畢後,廣播才會繼續傳遞。所以此時的BroadcastReceiver是有先後順序的,優先順序高的BroadcastReceiver就可以先收到廣播消息,並且前面的BroadcastReceiver還可以截斷正在傳遞的廣播,這樣後面的BroadcastReceiver就無法收到廣播消息了

有序廣播工作示意圖:

可以讓程序在未啟動的情況下接收廣播

在Android 8.0系統之後,所有隱式廣播都不允許使用靜態注冊的方式來接收了。隱式廣播指的是那些沒有具體指定發送給哪個應用程序的廣播,大多數系統廣播屬於隱式廣播,但是少數特殊的系統廣播目前仍然允許使用靜態注冊的方式來接收,詳見網址: https://developer.android.google.cn/guide/components/broadcast-exceptions.html

在 AndroidManifest.xml 文件中注冊

在 AndroidManifest.xml 文件中進行許可權聲明

不要在 onReceive() 方法中添加過多的邏輯或者進行任何的耗時操作,因為BroadcastReceiver中是不允許開啟線程的,當 onReceive() 方法運行了較長時間而沒有結束時,程序就會出現錯誤

先定義一個BroadcastReceiver來准備接收此廣播

在 AndroidManifest.xml 文件中注冊

有序廣播是一種同步執行的廣播,並且是可以被截斷的。為了驗證這一點,我們需要再創建一個新的BroadcastReceiver。新建AnotherBroadcastReceiver

同樣,在 AndroidManifest.xml 文件中注冊,同時,使用 intent-filter 標簽的 android:priority 屬性設置優先順序

前面的 AnotherBroadcastReceiver 的優先順序比較高,因此 AnotherBroadcastReceiver 一定比 MyBroadcastReceiver 先收到廣播,因此,可以在 AnotherBroadcastReceiver 的 onReceive 方法中使用 abortBroadcast() 方法截斷廣播,這樣 MyBroadcastReceiver 就收不到該廣播了

在界面上彈出一個對話框,讓用戶無法進行任何其他操作,必須點擊對話框中的「確定」按鈕,關閉所有的Activity,然後回到登錄界面即可

ActivityCollector 類用於管理所有的Activity,具有關閉所有Activity的功能

創建 BaseActivity 類作為所有 Activity 的父類,並在裡面實現強制下線功能,在這里實現此功能,有以下幾點原因

創建一個LoginActivity來作為登錄界面

activity_login.xml

LoginActivity 如果輸入 123 就到 MainActivity界面

MainActivity 中點擊強制下線按鈕,就發送強制下線的廣播

MainActivity 布局

3. android怎麼接收屏幕開關廣播

按理來收,你注冊一個廣播,然後在接收器裡面就可以監聽到。

4. android中的廣播是什麼意思

android的廣播概念和我們日常生活中的電台有相通之處,空氣中有不同頻段,不同電台的廣播,而android系統中就有對應的電池的電量,來電,簡訊還有例如sd卡拔插等等這些廣播的消息發出,這些消息就對應著用收音機調頻時,不同電台的節目。而我們注冊的廣播就類似於我收聽某個電台的節目,比如一個注冊廣播收聽交通廣播,另一個注冊的廣播收聽音樂廣播,那麼怎麼區分是交通廣播還是音樂廣播呢,這就要通過前一章提到的Intent的action來判斷。

5. Android系統廣播(Broadcast)注冊,發送,接收流程解析

以下廣播簡稱Broadcast

   是Android四大組件之一,在四大組件的另外兩個組件 和 擁有發送和接收廣播的能力。Android 是在 進程間通信機制的基礎上實現的,內部基於消息發布和訂閱的事件驅動模型,廣播發送者負責發送消息,廣播接收者需要先訂閱消息,然後才能收到消息。 進程間通信與 的區別在於:

   有三種類型

   存在一個注冊中心,也可以說是一個調度中心,即 。廣播接收者將自己注冊到 中,並指定要接收的廣播類型;廣播發送者發送廣播時,發送的廣播首先會發送到 , 根據廣播的類型找到對應的 ,找到後邊將廣播發送給其處理。

   這里以普通廣播為例子, 接收者有兩種注冊方式,一種是 ,一種是 :

(廣播的發送分為 兩種,這里針對有序的廣播) 中的android:priority=""和 中的IntentFilter.setPriority(int)可以用來設置廣播接收者的優先順序,默認都是0 , 范圍是[-1000, 1000],值越大優先順序越高,優先順序越高越早收到。

   在相同優先順序接收同個類型廣播時, 的廣播接收器比 的廣播接收者更快的接收到對應的廣播,這個之後會進行分析。

   註:以下源碼基於rk3399_instry Android7.1.2

   的流程可分為 , 和 三個部分,這里依次分析下

   在Android系統的 機制中,前面提到, 作為一個注冊和調度中心負責注冊和轉發 。所以 的注冊過程就是把它注冊到 的過程。

   這里我們分析 廣播的過程, 和 有一個共同的父類 ,所以它們對應的注冊過程其實是調用 ,接下來我們按照流程逐步分析調用流程的源碼。

frameworks/base/core/java/android/content/ContextWrapper.java

   在之前的 Android應用程序啟動入口ActivityThread.main流程分析 分析過,在我們啟動 Activity 時會創建一個 對象,然後通過 傳給我們啟動的 ,其內部就會將該對象賦值給 ; 的 方法也是類似的賦值流程,這里放個簡易的源碼應該更好理解

   可以看到最後都會將生成的 對象賦值給對應的
對象。接下來繼續分析 , 即 函數。

/frameworks/base/core/java/android/app/ContextImpl.java

   這里我們首先看下如何將廣播接收者 封裝成一個 介面的 本地對象
/frameworks/base/core/java/android/app/LoadedApk.java

   每一個注冊過廣播接收者的 或 組件在<font color='Crimson'> LoadedApk </font>類中都有個對應的 對象,該對象負責將 與 組件關聯起來。這些對象,以關聯的 作為關鍵字保存在一個 中。之後對應的 又以 的 作為關鍵字保存在 的成員變數 對象中。最後通過 對應的 方法獲得其 介面的 本地對象。之後再回到 注冊方法內,將 對象發給 進行注冊。

/frameworks/base/core/java/android/app/ActivityManagerNative.java

/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

   在的 或 注冊一個 時,並不是將其注冊到<font color='OrangeRed'>AMS</font>中,而是將與它關聯的<font color='OrangeRed'>InnerReceiver</font>對象注冊到<font color='OrangeRed'>AMS</font>中,當<font color='OrangeRed'>AMS</font>接收到廣播時,會根據 在內部找到對應的<font color='OrangeRed'>InnerReceiver</font>對象,然後在通過這個對象將這個廣播發送給對應的 處理。

   注冊過程這邊畫了一個簡單的流程圖:

   <font color='OrangeRed'>Broadcast</font>的發送過程可簡單描述為以下幾個過程:

frameworks/base/core/java/android/content/ContextWrapper.java

/frameworks/base/core/java/android/app/ContextImpl.java

/frameworks/base/core/java/android/app/ActivityManagerNative.java

/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

6. android怎麼接收手機鎖屏的廣播

一下方法或設置均游禪未驗證
==========
鎖屏或黑屏會廣播兩個消息分別睜磨判是:ACTION_SCREEN_OFF和ACTION_SCREEN_ON
程序控制手機永遠不鎖屏或者永遠亮光:通過設置View.setKeepScreenOn(boolean)的方悉改法可以永不鎖屏

===========以下方法作者聲稱沒有監聽到該廣播===========
public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals( "android.intent.action.SCREEN_OFF" )){
Toast.makeText(context, "bbbb", Toast.LENGTH_LONG).show();

}
}
xml文件中如下:
<receiver android:name="ServiceReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter>
</receiver>
================以下禁止鎖屏方法未驗證==============
在每個Activity的onCreate裡面加上如下代碼就可以了:
@Override
protected void onCreate(Bundle icicle){
super.onCreate(icicle);
getWindow();addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
轉載:http://mycoding.iteye.com/blog/962625

7. android 怎樣收到系統發送的廣播

要注冊接受廣播的處理程序, 有兩種方式

  1. 在AndroidManifest.xml重注冊, 比如監聽系統的開機廣播和屏幕解鎖廣播
    <receiver android:name="com.bestjoy.app.common.update.BootCompletedReceiver" >
    <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>
    </receiver>
    這樣, 一旦有定義的action發出來,BootCompletedReceiver的onReceive方法就會回調了,這樣的監聽,不需要你的app已經在運行。


2. 在程序中動態創建監聽器, 比如還是解鎖廣播,

在Activity的onCreate()中生成一個IntentFilter對象

IntentFilter filter=new IntentFilter();
//為IntentFilter添加一個Action
filter.addAction("android.intent.action.USER_PRESENT");
bootCompletedReceiver = newUserPresentReceiver();

registerReceiver(smsReceiver, filter);
在onDestroy的時候去注冊
unregisterReceiver(bootCompletedReceiver);
這樣的方式只有在Activity生命周期onCreate()-onDestroy()之間有效。

對於一些特俗的系統級別的廣播,即使你按照上面的任何一種方式做了, 也可能監聽不到, 這是android 系統做了保護了, 網上查一下就知道了。

8. Android本地廣播的使用

為了解決廣播的安全性問題,Android引入了本地廣播機制,使用該機制發出的廣播只能在應用程序的內部進行傳遞,並且廣播接收器也只能接收來自本應用程序發出的廣播。

本地廣播是無法通過靜態注冊的方式來接收的。我們知道靜態注冊主要是為了在程序未啟動的情況下能接收廣播,而當我們發送本地廣播的時候,程序肯定是已經啟動的了,所以我們需要動態注冊方式創建接收器。
在這里我們創建一個繼承於BroadcastReceiver的類LocalReceiver。onReceive()處理你接收到的廣播內容,在這里我用Toast來創建一個提示接收到消息的彈窗

在activity_main.xml文件創建一個用於發送廣播的按鈕

首先通過本地廣播管理器LocalBroadcastManager的getInstance()方法獲取一個實例,並分別創建過濾器IntentFilter和自定義接收器LocalReceiver的實例。給IntentFilter的實例添加一個action:localbroadcast(接收的廣播的名稱),然後調用LocalBroadcastManager的registerReceiver()方法進行注冊,並將LocalReceiver的實例和IntentFilter的實例都傳進去。這樣本地監聽器就創建完成了。
調用LocalBroadcastManager的sendBroadcast()發送本地廣播。運行程序,點擊Send Button按鈕,我們可以看到彈窗顯示「This is in LocalReceiver」,說明本地廣播發送和接收成功了。

當然,我們最後一定不要忘了取消注冊。我們可以通過調用unregisterReceiver()方法來實現。至此,Android的標准廣播發送就完成了。

1.發送的廣播只能在本程序內傳遞,不必擔心數據泄露
2.其它程序廣播無法發送到本程序的內部,不必擔心安全漏洞隱患
3.本地廣播比系統全局廣播更加高效

熱點內容
怎麼把電腦鎖上密碼 發布:2024-05-20 05:19:09 瀏覽:982
安卓為什麼連上wifi後沒有網路 發布:2024-05-20 05:17:50 瀏覽:417
安卓usb在設置哪裡 發布:2024-05-20 05:03:03 瀏覽:185
綏化編程 發布:2024-05-20 04:59:44 瀏覽:989
基本原理和從頭計演算法 發布:2024-05-20 04:50:32 瀏覽:28
配置情況指的是什麼 發布:2024-05-20 04:48:14 瀏覽:495
那個程序用來編譯源文件 發布:2024-05-20 04:46:45 瀏覽:549
小程序需要資料庫嗎 發布:2024-05-20 04:35:14 瀏覽:337
鏈接sqlserver 發布:2024-05-20 04:27:53 瀏覽:209
ftp文件伺服器擴容 發布:2024-05-20 04:22:21 瀏覽:646