【问题标题】:Receive Broadcast only from specific package in android仅从android中的特定包接收广播
【发布时间】:2021-11-02 16:13:22
【问题描述】:

My Sender App 会将其版本号发送到 My Receiver App

我的 Sender App 的 MainActivity(初始 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);
}

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

我的接收器应用程序清单:

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

我的 Receiver 应用的 MainActivity(初始 Activity):

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

我的接收器应用的广播接收器:

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();
    }
}

只有当版本号来自包 id = com.sender.app 的 Sender App 时,我的 Receiver App 才应在 Toast 中打印版本号

【问题讨论】:

    标签: android security package broadcast receiver


    【解决方案1】:

    我想到的最简单的方法是在您的意图内发送您的包裹 ID。 在您的发件人应用程序中放置:

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

    然后在 onReceive 中的接收器应用中进行检查:

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

    【讨论】:

    • 这看起来很奇怪。在线有 APK 反编译器,可以显示所有源代码。因此,任何人都可以将我的发件人应用程序包名称添加到 extras 中,并从他们的应用程序发送广播。
    • 我认为没有一种干净的方法可以确定是谁向您发送了广播。请查收:stackoverflow.com/questions/3755896/…
    猜你喜欢
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多