2016-12-04 58 views
0

我已經研究過無處不在來解決這個問題,並且我相當肯定它與我的清單文件有關。當試圖與下面的代碼連接與 contextService = IContextInterface.Stub.asInterface(service),代碼打印到日誌中,指出服務對象仍然是空將應用程序綁定到AIDL服務的問題

contextServiceConnection = new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      contextService = IContextInterface.Stub.asInterface(service); 
      Toast.makeText(getApplicationContext(), 
        "Context Service Connected", Toast.LENGTH_SHORT) 
        .show(); 
      Log.d("IApp", "Binding is done - Context Service connected"); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      // TODO Auto-generated method stub 
      contextService = null; 
      Toast.makeText(getApplicationContext(), "Service Disconnected", 
        Toast.LENGTH_SHORT).show(); 
      Log.d("IRemote", "Binding - Location Service disconnected"); 
     } 
    }; 
    if (contextService == null) { 
     Intent contextIntent = new Intent(); 
     contextIntent.setPackage("com.example.the_f.myapplication"); 
     contextIntent.setAction("service.contextFinder"); 
     bindService(contextIntent, contextServiceConnection, Context.BIND_AUTO_CREATE); 
     mContextIsBound = true; 
     if(contextService==null) 
      Log.d("locService","NULL"); 
    } 

我甚至檢查了第二遍,這樣,如果其爲null,它會嘗試手動綁定到它。但是它仍然打到最後一條if語句,因爲日誌正在打印「locService:NULL」。

這裏是我的客戶端應用程序清單:

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

,這裏是我的遠程服務清單:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <service 
     android:name=".MyMiddleware" 
     android:enabled="true" 
     android:exported="true"></service> 
</application> 

香港專業教育學院重新啓動這一計劃的3倍,因爲我一直在想這是不正確的建設或出現在某處埋藏一些文件有問題。即時通訊不是一個真正的Android專家,所以我不知道很多事情。任何幫助或指導將不勝感激。在此先感謝

+0

你必須等待onServiceConnected。 – natario

+0

好的你沒錯。我將打印語句放入onServiceConnected並且未被調用。我不知道我在做什麼不同。我幾乎複製了在線看到的各種示例。即使在android dev網站上,他們也是這樣設置的。所以顯然我的應用程序永遠不會連接到服務 –

回答

0

從您發佈的內容我可以看到一個缺少的東西。 你是在故意

contextIntent.setAction("service.contextFinder"); 

設定的動作但是,你有沒有定義的服務清單條目的任何過濾器。

請嘗試以下 -

<service 
    android:name=".MyMiddleware" 
    android:enabled="true" 
    android:exported="true"> 
     <intent-filter> 
      <action android:name="service.contextFinder" /> 
     </intent-filter> 
</service> 

而且你不一定需要它,但如果你想限制的意圖,只是你的服務確保包就是服務應用的。

contextIntent.setPackage("com.example.the_f.myapplication"); 

natario說,你纔會()的回調,而不是之前得到onServiceConnected存根實例,bindService()幾乎可以肯定不對後調用。

希望這會有所幫助。