getCallingPid()在onBind()中返回我的PID

时间:2010-09-02 02:01:56

标签: android

我刚刚开始使用Android编程,我已经实现了一个非常简单的远程服务。我能够从其他进程绑定到我的服务,并来回发送简单的“ping”和“pong”消息。 (我没有使用AIDL,存根等。我只是传递Messages并使用what字段。)

我正在调查权限,但我遇到了一个问题。在我的onBind()方法中,checkCallingPermission()始终返回PERMISSION_DENIED,即使调用进程确实具有相关权限(通过在该进程中调用checkCallingOrSelfPermission()进行验证)。我怀疑这种情况正在发生,因为Binder.getCallingUid()正在返回服务器进程的PID,而不是调用者。

知道我可能做错了什么吗? checkCallingPermission()应该在服务的onBind()方法中以这种方式工作,对吗?

谢谢!

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您必须在活页夹实现方法中调用Binder.getCallingPid()(扩展xxx.Stub)