1
我知道如何通過aidl接口從活動中調用服務方法。但是,如何從運行在獨立進程中的服務中調用方法,而不需要廣播接收器?如何在獨立過程中從服務中調用活動中的方法?
有沒有什麼辦法可以通過相同的aidl接口或其他java接口在我的活動中調用方法?
代碼:
//aidl interface
interface IRemoteServiceCallback {
void valueChanged();
}
//starting service in activity
Intent serviceIntent = new Intent(BackgroundService.class.getName());
serviceIntent.setPackage("com.example.service2");
startService(serviceIntent);
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
//aidl stub implementation in activity
private IRemoteServiceCallback mCallback = new IRemoteServiceCallback.Stub() {
@Override
public void valueChanged() {
System.out.println("Callback method called");
}
};
//service connection in activity
BackgroundService mService = null;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
System.out.println("Callback service connected");
try {
mService.registerCallback(mCallback);
} catch (Exception e) {
Log.e("Service2-CallbackService-Connecting:", e.toString());
}
}
public void onServiceDisconnected(ComponentName className) {
if (mService != null) {
try {
mService.unregisterCallback(mCallback);
} catch (Exception e) {
Log.e("Service2-CallbackService:", e.toString());
}
}
}
};
// registering callbacks in service
public void registerCallback(IRemoteServiceCallback mCallback) {
System.out.println("Callback registers...");
this.mCallback = mCallback;
}
public void unregisterCallback(IRemoteServiceCallback mCallback2) {
this.mCallback = null;
}
//calling method
mCallback.valueChanged();
他們說的關於活動中的回調存根實現。但他們沒有說任何關於從服務中調用這個存根方法的事情。 – Sushant
檢查我更新的答案。 – suresh
是的。這是活動部分。服務部分怎麼樣?如何從服務中調用此服務? – Sushant