我刚刚开始使用Android编程,我已经实现了一个非常简单的远程服务。我能够从其他进程绑定到我的服务,并来回发送简单的“ping”和“pong”消息。 (我没有使用AIDL,存根等。我只是传递Messages
并使用what
字段。)
我正在调查权限,但我遇到了一个问题。在我的onBind()
方法中,checkCallingPermission()
始终返回PERMISSION_DENIED
,即使调用进程确实具有相关权限(通过在该进程中调用checkCallingOrSelfPermission()
进行验证)。我怀疑这种情况正在发生,因为Binder.getCallingUid()
正在返回服务器进程的PID,而不是调用者。
知道我可能做错了什么吗? checkCallingPermission()
应该在服务的onBind()
方法中以这种方式工作,对吗?
谢谢!
答案 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)