有人能告诉我从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>
...
答案 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方法就是要走的路。