BroadcastReceiver,一个活动结束,将不会收到消息

时间:2015-02-17 01:49:19

标签: android android-intent broadcastreceiver

我有活动SingleSpecial,用户点击该活动以分享并启动以下操作:

    inviteFriend.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {

            // Send broadcast of the sharedId to the SharingAction
            Intent i = new Intent();
            i.setAction("com.example.specialSharing.SHARED_SPECIAL");
            i.putExtra("specialId", specialId);
            sendBroadcast(i);

            // Open invite activity:
            Intent specialSharing = new Intent(getBaseContext(), InviteFriendOrGroup.class);
            startActivity(specialSharing);
        }
     }

InviteFriendOrGroup.class旨在打开,用户选择要与之分享的人。在选择要共享的人员后,SharingAction类将打开并且应该从SingleSpecial类的两个步骤接受来自活动的广播。

我已将广播接收器设置为接受动作,并在SharingAction的onCreate方法中设置:

广播接收器:

public class SpecialInfoReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            Log.i("Shared special received ", "received special id");
            Bundle extra = intent.getExtras();
            if (extra != null) {
                String action = intent.getAction();
                if (action.equals("com.example.specialSharing.SHARED_SPECIAL")) {

                    Toast.makeText(getApplicationContext(), "The shared special Id is ok", Toast.LENGTH_LONG).show();
                }
            }
        }
    }

onCreate中的接收者:

SpecialInfoReceiver specialInfoReceiver = new SpecialInfoReceiver();

        IntentFilter filter = new IntentFilter("com.example.specialSharing.SHARED_SPECIAL");
        this.registerReceiver(specialInfoReceiver, filter);

可以看出,接收者在收到sepcialId动作时显示祝酒词。但它没有任何作用。

如何设置此功能?

2 个答案:

答案 0 :(得分:0)

根据Intent构造函数的android文档(String action):

  

使用给定操作创建意图。所有其他字段(数据,类型,类)都为空。请注意,该操作必须位于命名空间中,因为Intents在系统中全局使用 - 例如,系统VIEW操作是android.intent.action.VIEW;应用程序的自定义操作类似于com.google.app.myapp.CUSTOM_ACTION。

以及Intent.setAction()的动作参数:

  

动作名称,例如ACTION_VIEW。特定于应用程序的操作应以供应商的包名称为前缀。

两者都建议有效的动作名称属于您的命名空间(基础包)。不为命名空间添加前缀可能会导致在不同应用程序之间冲突操作名称的广泛问题。

由于动作名称无效,可能无法成功播放广播。尝试将操作更改为<package>.SHARED_SPECIAL

如果您只打算在应用程序中发送广播,请考虑使用LocalBroadcastManager。它更安全(因为在其他应用程序组件中,如果他们正在侦听Intent,则不会突然触发)。

答案 1 :(得分:0)

您是否已将广播添加到清单?

<receiver android:name="com.example.SpecialInfoReceiver"/>

或者如果Broadcast在另一个类中:

<receiver android:name="com.example.YourActivity.$SpecialInfoReceiver"/>