2010-09-02 58 views
1

我剛剛開始使用Android編程,並且我實現了一個簡單的遠程服務非常簡單的。我能夠從其他進程綁定到我的服務並來回發送簡單的「ping」和「pong」消息。 (我沒有使用AIDL,存根等。我只是通過Messages並使用what字段。)getCallingPid()返回我的PID在onBind()

我正在調查權限,並且遇到問題。在我的onBind()方法中,checkCallingPermission()始終返回PERMISSION_DENIED,即使調用進程確實有問題的權限(通過在該進程中調用checkCallingOrSelfPermission()進行驗證)。我懷疑這是因爲Binder.getCallingUid()正在返回服務器進程的PID,而不是調用者。

任何想法我可能做錯了什麼? checkCallingPermission()應該在服務的onBind()方法中以這種方式工作,對吧?

謝謝!

回答

0

onBind()不處理從另一個進程發送的事務 - Android系統正在通知您的進程已經綁定了某個進程,並且會將給定的IBinder返回到綁定進程。 爲了防止從工藝結合,如果它不具有所需的權限,將允許在應用程序清單:

<application android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:permission="my.package.permission.RESTRICT" >   <-- Permission 
    <service android:exported="true" android:name=".MyService"> 
     <intent-filter> 
      <action android:name="my.package.IAidl" /> 
     </intent-filter> 
    </service> 
</application> 
+0

這是行不通的。系統緩存粘合劑。嘗試從不同進程綁定多次。 'onBind()'只調用一次。如果您想檢查權限,則必須在聯編程序的AIDL方法定義中實施權限檢查。 – 2015-12-16 22:48:57

相關問題