在android中只接收特定包的广播



我的发送者应用程序将发送它的版本号给我的接收者应用程序

我的Sender App的MainActivity (Initial Activity):

package com.sender.app;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent();
intent.putExtra("version", BuildConfig.VERSION_NAME);
intent.setAction("get.sender.app.version");
intent.setPackage("package com.receiver.app;");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(intent);
}

=================================

My Receiver App's Manifest:

<receiver
android:name=".receivers.BroadcastReceiver_GetSenderAppVersion"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="get.sender.app.version" />
</intent-filter>
</receiver>

My Receiver App's MainActivity (Initial Activity):

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter intentFilter = new IntentFilter("get.sender.app.version");
registerReceiver(new BroadcastReceiver_GetSenderAppVersion(), intentFilter);
}

My Receiver App's Broadcast Receiver:

package com.receiver.app;
public class BroadcastReceiver_GetSenderAppVersion extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// IT SHOULD COME HERE, ONLY IF IT IS FROM SENDER APP PACKAGE (com.sender.app)
if (intent.hasExtra("version") && intent.getStringExtra("version").length() > 0) 
Toast.makeText(context, intent.getStringExtra("version"), Toast.LENGTH_LONG).show();
}
}

我的接收端App应该在Toast中打印版本号,只有当它来自包id = com.sender.app的发送端App

我想到的最简单的方法是在你的意图中发送你的包id。在你的发送者应用中输入:

intent.putExtra("senderPackage","com.sender.app");

然后在你的receiver应用中onReceive do check:

if(intent.getExtras().getString("senderPackage").equals("com.sender.app")

最新更新