0

我正在構建幾個應用程序,這些應用程序都包含我創建的庫模塊。在這個庫模塊我定義廣播「買入」的意圖這樣的通用目的的對話:Android - 防止其他應用程序接收隱式意圖

@Override public void onClick(View view) { 
     int i = view.getId(); 
     if (i == R.id.btnYes) { 
      view.getContext().sendBroadcast(new Intent(PayComponent.ACTION_OPEN_PAY_SCREEN) 
        .putExtra(PayComponent.EXTRA_FROM_PURCHASE_DIALOG, true) 
        .putExtra(PayComponent.EXTRA_PURCHASE_PACKAGE_NAME, packageName) 
      ); 
     } else if (i == R.id.btnNo) { 
      // 
     } 
     dismiss(); 
    } 

這裏的問題是,當我在應用一個單擊該對話框上時,我有兩個應用AB已打開(廣播接收者未在清單中註冊,但在活動中運行),兩個應用都將收到該意圖並採取相應措施(打開購買活動)。我想要實現的行爲是隻有發送廣播的應用程序能夠接收它,所以基本上這個意圖不會被廣播到系統中。

PS:兩個應用程序都使用相同的調試密鑰進行簽名,但它們也使用相同的釋放密鑰。我很確定這個問題有一個簡單的解決方案,但我似乎無法在文檔中找到它。

PS2:我不想使用明確的意圖,因爲庫不知道將接收意圖的組件。它只知道它們應該在同一個應用程序中。

+0

您可以使用android:exported =「false」將接收器限制爲僅適用於自己的應用程序 – rahul

+0

爲什麼要使用系統廣播與其託管應用程序通信?這類似於在街對面豎立一個巨型廣告牌,以便能夠向隔壁鄰居發送信息。使用回調。或者,使用一個事件總線(例如,'LocalBroadcastManager',就像Gabe Sechan所建議的那樣)。 – CommonsWare

回答

2

使用LocalBroadcastManager只發送廣播到您當前的應用程序。也通過LocalBroadcastManager註冊(而不是BroadcastManager)。

相關問題