2016-12-05 100 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 .... –