Hi,
Ich habe Android einen eigenen Systemservice hinzugefügt (der also system_process läuft (Process.myUid() == 1000)). In dem Service kann ich ja mittels Binder.getCallingUid() den aufrufenden Process bestimmen. Soweit so gut.
Aber wenn ich in meinem Service einen anderen Service aufrufe (z.b. den LocationManager) gibts leider ne SecurityException, da der 2. Service wohl denkt er wäre von der App aufgerufen worden die meinen Service aufgerufen hat.
Das sollte doch eigentlich nicht der Fall sein, und als Systemservice sollte ich jederzeit alle Permissions haben, oder?
ZitatZitat von programming4.us/Mobile/1304.aspx:
Binder services are free to make other binder calls, but these calls always occur with the service’s own identity (UID and PID) and not the identity of the caller.
Habe mal den Code meines zur Demonstration angehängt:
public class MyService implements IInterface {
public IBinder asBinder() {
return mBinder;
}
private final IMyService.Stub mBinder = new IMyService.Stub() {
public Bundle doSomething() {
int uid = Binder.getCallingUid(); // UID der aufrufenden App
int myUid = Process.myUid(); // my uid == 1000
...
try {
ILocationManager lm = ILocationManager.Stub.asInterface(ServiceManager.getService("location"));
Location myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (Exception e) {
Requires ACCESS_FINE_LOCATION :-(
}
}
};
}
Alles anzeigen
Bin dankbar für jede Hilfe!
PS: Hoffe ich bin im richtigen Forum.