2016-12-05 48 views
0

我建立了一个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似乎没有可用的方法来通知活动它正试图连接的服务不可用。

谢谢。

+1

请注意,从[Android 5.0](https://developer.android.com/about/versions/android-5.0-changes.html#BindService)开始,绑定到服务**必须使用明确的'意图“ - 仅仅使用一个动作将会失败,并带有”IllegalArgumentException“。 – ianhanniballake

回答

2

bindService() documentationboolean值返回是

如果您已成功绑定到服务,则返回true;如果未建立连接,则返回false,因此您将不会收到服务对象。

如果该服务不存在,则bindService将返回false

+0

我想我错过了:D .... –