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();
}
這裏的問題是,當我在應用一個單擊該對話框上時,我有兩個應用A和B已打開(廣播接收者未在清單中註冊,但在活動中運行),兩個應用都將收到該意圖並採取相應措施(打開購買活動)。我想要實現的行爲是隻有發送廣播的應用程序能夠接收它,所以基本上這個意圖不會被廣播到系統中。
PS:兩個應用程序都使用相同的調試密鑰進行簽名,但它們也使用相同的釋放密鑰。我很確定這個問題有一個簡單的解決方案,但我似乎無法在文檔中找到它。
PS2:我不想使用明確的意圖,因爲庫不知道將接收意圖的組件。它只知道它們應該在同一個應用程序中。
您可以使用android:exported =「false」將接收器限制爲僅適用於自己的應用程序 – rahul
爲什麼要使用系統廣播與其託管應用程序通信?這類似於在街對面豎立一個巨型廣告牌,以便能夠向隔壁鄰居發送信息。使用回調。或者,使用一個事件總線(例如,'LocalBroadcastManager',就像Gabe Sechan所建議的那樣)。 – CommonsWare