我建立了一个Android启动为我公司广告牌,暴露象下面这样AIDL服务:Android检查后台服务可用性?
interface IBillboardAPI {
String onAppStart(String mediaKey, String session);
String onAppSleep(String mediaKey, String session);
String getAppCampaignsList(String mediaKey, String session);
String getAppCampaign(String mediaKey, String session, long campaignId);
byte[] downloadCampaignMaterial(String url);
}
而且我还内置了Java的lib中,将整合所有游戏(使用这个库之上)与我们的Android启动器如果游戏安装在我们的广告牌。
我可以通过我的lib连接游戏和AIDL服务,使用下面的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.info(">>> ON CREATE...");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.info(">>> CONNECTED...");
billboardAPI = IBillboardAPI.Stub.asInterface(iBinder);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
billboardAPI = null;
Log.info(">>> DISCONNECTED...");
}
};
if (billboardAPI == null) {
Log.info(">>> CONNECTING TO SERVICE...");
Intent i = new Intent();
i.setAction("service.BILLBOARD_API");
bindService(i, connection, Service.BIND_AUTO_CREATE);
}
}
因为游戏不仅会在我们广告牌,而且在用户的移动安装.. 。我想知道,
如何连接我们的广告牌AIDL服务,因为游戏没有安装在我们的广告牌,但用户的手机上面的连接代码时,我可以让我的lib扔一个事件?
ServiceConnection似乎没有可用的方法来通知活动它正试图连接的服务不可用。
谢谢。
请注意,从[Android 5.0](https://developer.android.com/about/versions/android-5.0-changes.html#BindService)开始,绑定到服务**必须使用明确的'意图“ - 仅仅使用一个动作将会失败,并带有”IllegalArgumentException“。 – ianhanniballake