使用它从Android库项目到应用程序的不同通信

时间:2014-05-12 12:20:52

标签: android library-project

有人能告诉我从Android库项目到使用此库的应用程序进行通信的好方法吗?

一点描述:我的库收到GCM通知,并使用此库将其中一些转发到应用程序。现在我通过库发送的Intents和在App中监听该意图的BroadcastReceiver实现了这一点。

问题:当我使用我的应用程序安装2个应用程序时,两者都会收到彼此通知。有人有想法吗?

提前致谢!

[编辑]

这是一些代码。我在库中收到GCM通知并将其转发到正在使用的应用程序:

GCMIntentService:

@Override
protected void onHandleIntent(Intent intent) {
   ...
        String notificationString = intent
            .getStringExtra(GCMConstants.NOTIFICATION);

        Intent broadIntent = new Intent(getResources().getString(
                R.string.con_broadcast_gcm_notification));
        broadIntent.putExtra("callback", notification.getCallback());
        context.sendBroadcast(broadIntent);
    ...
    }

我的BroadcastReceiver侦听con_broadcast_gcm_notification。它通过Intent-Filter在清单中注册。

的manifest.xml

    ...
    <receiver android:name=".MyBroadcastReceiver" >
        <intent-filter>
            <action android:name="de.tuberlin.snet.gcm.notification" />
        </intent-filter>
    </receiver>
    ...

2 个答案:

答案 0 :(得分:3)

您可以使用LocalBroadcasts代替普通广播。它们基本上就像真正的广播一样,但只对一个应用程序可见。我假设您想要从Service与应用进行通信?然后LocalBroadcasts应该正是您所寻找的,但如果不确切知道您是如何实施的,我就无法给您非常具体的建议。

无论如何,如果您想使用LocalBroadcasts,首先必须像普通广播一样创建BroadcastReceiver

private static final String SOME_ACTION = "someAction";

private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(SOME_ACTION.equals(action)) {
            // Do your work
        }
    }
};

然后您可以注册和取消注册BroadcastReceiver,如下所示:

@Override
public void onResume() {
    super.onResume();

    IntentFilter intentFilter = new IntentFilter(SOME_ACTION);

    LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
    manager.registerReceiver(broadcastReceiver, intentFilter);
}

@Override
public void onPause() {
    super.onPause();

    LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
    manager.unregisterReceiver(broadcastReceiver);
}

最后,您可以从Service或您应用中的任何其他位置发送广播,如下所示:

Intent intent = new Intent(SOME_ACTION);

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
manager.sendBroadcast(intent);

答案 1 :(得分:1)

在Android中执行此操作的正确方法取决于您的“库”的安装方式。

如果您的库本身作为单独的“应用程序”安装,则解决方案 是为不同的广播使用不同的意图过滤器。通过这种方式,Android将仅向那些宣传其兴趣的应用提供广播。您需要使用不同的intent过滤器更新您的客户端应用程序,并更改您的库以使用相应客户端的intent过滤器作为其广播的一部分。

如果你的图书馆与你的两个客户捆绑在一起,那么使用LocalBroadcastManager方法就是要走的路。