導航:首頁 > 操作系統 > android系統廣播事件

android系統廣播事件

發布時間:2023-07-26 13:39:23

① 12、注冊廣播有幾種方式,這些方式有何優缺點請談談android引入廣播機制的用意。

  1. 注冊廣播的分類:靜態注冊和動態注冊。

    靜態注冊:在清單文件里直接注冊,從app開啟到app銷毀,一直在接收廣播,接收廣播時間長,但是接收廣播的優先順序低於動態注冊廣播。

    動態注冊:動態注冊,動態銷毀,從onCreate到取消注冊,期間接收廣播,接收廣播時間是短且可控,接收廣播的優先順序高。例如:

    發送廣播:
    Intent i = new Intent();
    i.setAction("ACTION_CLOSE");
    sendBroadcast(i);

    接受廣播:
    onCreate(){

    //注冊廣播的接受者
    IntentFilter filter = new IntentFilter();
    filter.addAction("ACTION_CLOSE_ACTIVITY");
    receiver = new InnerReceiver();
    registerReceiver(receiver, filter);
    }

    private class InnerReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //TODO 當前Activity接收到廣播 需要做的事情
    }
    }
    }

    //注銷廣播

    @Override
    protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(receiver);
    }


2.引入廣播的原因:

a) 不同的app之間傳信通用

b)發出一條指定,需要多個Activity都需要有反應


注意:以上僅供參考,如有疑問,請追問,謝謝。

② 簡述在android中如何發送廣播消息

1.發送廣播
Intent intent = new Intent(BroadcastAction);
Bundle bundle = new Bundle();
bundle.putString("***", SUCCESS);
bundle.putString("FullPathName", mFullPathName);
intent.putExtras(bundle);
sendBroadcast(intent);
2.在Activity中創建一個內部類MyBroadcastReceiver擴展BroadcastReceiver,並在其中實現onReceive方法。
3.在Activity中聲明一個MyBroadcastReceiver類型的成員變數,並注冊:
private MyBroadcastReceiver myBroadcastReceiver;
...
myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BroadcastAction);
registerReceiver(receiver, filter);
4.使用完後要記得釋放
unregisterReceiver(receiver);

註:1和2中的 BroadcastAction要是同一個Action

③ android的混合開發 JS頁面能接收廣播嗎 在網頁接收不到藍牙按鍵的事件和廣播

不是手機的問題,耳機的問題。
藍牙耳機不止一種,我所知的一種是a2dp的一種不是a2dp的,a2dp的耳機就是可以聽歌的,另外一種不能聽歌
對於a2dp的耳機,如果短按一次hook鍵,系統會當作一個keyevent來處理,走的是發送廣播的流程。如果短按多次,或者長按一次hook 鍵,不會有keyevent,會當作一個類似與「BVRA」的AP命令來處理,處理過程可以參考源碼的BluetoothHandsfree.java, 這個時候就收不到廣播。
而對於不是a2dp的耳機,無論怎樣按按鍵,都是發送ap命令,不會收到keyevent。
解決方法有兩個,一是換個耳機,二是改rom,在藍牙bsp那部分,無論什麼耳機都走keyevent的流程

④ android service的監聽前台點擊事件怎麼寫

  1. 第一種辦法是廣播,一般來說系統對於音量鍵和Home鍵會發送廣播,我們可以再廣播中監聽這些按鍵信息。具體的IntentFilter怎麼寫,大家可以網路一下。

  2. 第二種辦法仍然是廣播,不過這就需要修改SDK了,在WindManagerService裡面,分發按鍵事件的時候的發送特殊的廣播的,這個改動可能比較麻煩。

  3. 第三種辦法是直接讀取輸入設備文件,一般該文件位於/dev/input/文件夾下面,不過裡面一般有多個文件,具體哪個文件描述的哪一個輸入設備,需要大家進行嘗試。設備的文件的讀取需要使用c或者c++來完成。具體的實現代碼可以參考:https://github.com/radhoo/android-event-injector。這種辦法需要有root許可權才行,而且讀取的鍵值是沒有做過轉換的,也就是說和我們平常使用的鍵值是不一樣的。其實大家可以在adb shell中,通過getevent查看。

  4. 第四種辦法是使用系統的無障礙服務,也就是AccessibilityService。我最終採用的方式就是這個,因為這個不僅可以監聽按鍵,還能攔截。關於AccessibilityService的實現,網上講的比較多了。我這里只提幾個需要注意的點:

閱讀全文

與android系統廣播事件相關的資料

熱點內容
雲電腦的伺服器網站 瀏覽:437
木工專用空氣壓縮機 瀏覽:177
synfloodlinux 瀏覽:83
linux卸載openssl 瀏覽:100
python爬蟲網址要求 瀏覽:964
什麼是金稅盤伺服器 瀏覽:437
phpsocket開發 瀏覽:509
caj文檔轉pdf 瀏覽:552
eclipsemaven命令配置 瀏覽:337
雅安視監控app叫什麼名字 瀏覽:731
東方財富app籌碼藍色和紅色是什麼 瀏覽:566
pr安裝文件夾圖標變白 瀏覽:179
如何用伺服器建設網站 瀏覽:349
定時鬧鍾單片機課程設計 瀏覽:537
腰椎壓縮性骨折症狀 瀏覽:466
絕地求生全軍出擊的伺服器什麼時候開 瀏覽:493
怎麼入侵游戲伺服器篡改數據 瀏覽:736
線性壓縮機原理 瀏覽:543
javanewinstance 瀏覽:817
程序員第一玄學 瀏覽:499