简体   繁体   中英

Activity not receiving Custom Broadcast Intent from Broadcast Receiver

I have a Broadcast Receiver ( BackgroundReceiver ) which listen for package removal and then broadcast the package name to an Activity ( AnalyzeActivity )

BackgroundReceiver.java

public static final String REMOVED_INTENT = "com.analyze.project.RemovedReceiver";

    public void onReceive(Context context, Intent intent) {
        String actionStr = intent.getAction();
        if (Intent.ACTION_PACKAGE_REMOVED.equals(actionStr)) {
            Uri uri = intent.getData();
            String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
            Log.i("Logging Service", "Package Removed: " + pkg);
            //Toast.makeText(context, "Package Removed:" + pkg, Toast.LENGTH_SHORT).show();

            Intent c = new Intent();
            c.setAction(REMOVED_INTENT);
            c.putExtra("Package", pkg);
            context.sendBroadcast(c);
        }
    }

I dynamically register the receivers inside my AnalyzeActivity and listen for the custom Broadcast Intent from BackgroundReceiver

AnalyzeActivity.java

    @Override
        protected void onResume() {
            super.onResume();
            // Register Sync Recievers
            IntentFilter intentToReceiveFilter = new IntentFilter();
            intentToReceiveFilter.addAction(BackgroundReceiver.REMOVED_INTENT);
            this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler);
            mReceiversRegistered = true;

        }

    final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String Package = intent.getStringExtra("Package");
        if (intent.getAction().equals(BackgroundReceiver.REMOVED_INTENT)) {
                Toast.makeText(context, "(A) Package Removed: " + Package, Toast.LENGTH_SHORT).show();
                Log.i("Package Removed", "(A) Package Removed: " + Package);
            }

        }
    };

But my Activity doesn't seem to be able to receive the broadcast intents at all.

Use this to register broacast in your onResume

IntentFilter filter = new IntentFilter(BackgroundReceiver.REMOVED_INTENT);

mIntentReceiver intentToReceiveFilter = new mIntentReceiver();

registerReceiver(intentToReceiveFilter,filter);

And use this to send broadcast from the package removal broadcast receiver

Intent intent = new Intent(BackgroundReceiver.REMOVED_INTENT);
intent.putExtra("Package", pkg);
context.sendBroadcast(intent);

Please let me know if it solves your problem

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM