導航:首頁 > 操作系統 > 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系統廣播事件相關的資料

熱點內容
黑馬程序員培訓機構官網天津 瀏覽:903
mainjavasrc 瀏覽:57
如何買伺服器挖礦 瀏覽:291
php批量上傳文件夾 瀏覽:559
安卓固件怎麼更新 瀏覽:168
單片機代碼常式網站 瀏覽:922
UG編程如何多平面輪廓2D倒角 瀏覽:438
視頻壓縮漸變紋 瀏覽:852
什麼app能看財經新聞 瀏覽:40
數學奇跡神奇運演算法 瀏覽:360
大廠的程序員的水平如何 瀏覽:701
遺傳演算法入門經典書籍 瀏覽:879
源碼炮台腳本 瀏覽:621
在位編輯命令 瀏覽:348
曲式分析基礎教程pdf 瀏覽:15
php生成靜態html頁面 瀏覽:965
怎麼分割pdf 瀏覽:813
壓縮垃圾報警器 瀏覽:629
小公司一般都用什麼伺服器 瀏覽:968
java獲取時間gmt時間 瀏覽:821