해결이 잘 안되서 다시 질문을 드립니다..
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String SERVER_PACKAGE = "lite.bluelight.jdk.com.aidlservice";
private static final String SERVER_ACTION = "lite.bluelight.jdk.com.aidlservice";
private IRemoteService mRemoteService;
private IRemoteServiceCallback mRemoteServiceCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent serviceIntent = new Intent(SERVER_ACTION);
serviceIntent.setPackage(SERVER_PACKAGE);
getApplication().bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
startService(serviceIntent);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int sum = mRemoteService.sum(2, 5);
Toast.makeText(getApplicationContext(), String.valueOf(sum), Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(serviceConnection);
}
public ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.e("DDDD", "Service has unexpectedly onServiceConnected");
if(service != null) {
try {
mRemoteService = IRemoteService.Stub.asInterface(service);
mRemoteServiceCallback.registerCallback(mRemoteService);
}catch (Exception e){
e.printStackTrace();
}
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.e("DDDD", "Service has unexpectedly onServiceDisconnected");
if(mRemoteServiceCallback != null) {
try {
mRemoteServiceCallback.unregisterCallback(mRemoteService);
}catch (Exception e){
e.printStackTrace();
}
}
}
};
}
ServerService.java
public class ServerService extends Service {
@Override
public IBinder onBind(Intent intent) {
return new IRemoteServiceImpl();
}
private class IRemoteServiceImpl extends IRemoteService.Stub {
@Override
public int sum(int a, int b) throws RemoteException {
Log.e("DDDD", "DDDDDDDDDDDDDDDDD");
return a + b;
}
}
//-------------------------------------------------------------------------------
final RemoteCallbackList callbacks = new RemoteCallbackList();
private final IRemoteServiceCallback.Stub mBinder = new IRemoteServiceCallback.Stub() {
@Override
public boolean unregisterCallback(IRemoteService callback) throws RemoteException{
boolean flag = false;
if(callback != null){
flag = callbacks.register(callback);
}
return flag;
}
@Override
public boolean registerCallback(IRemoteService callback) throws RemoteException{
boolean flag = false;
if(callback != null){
flag = unregisterCallback(callback);
}
return flag;
}
};
}
IRemoteServiceCallBack.aidl (service파일은 이미 있어서 Callback으로 추가했습니다)
package lite.bluelight.jdk.com.aidl;
import lite.bluelight.jdk.com.aidl.IRemoteService;
interface IRemoteServiceCallback {
boolean registerCallback(IRemoteService callback);
boolean unregisterCallback(IRemoteService callback);
}
IRemoteService.aidl
// IRemoteService.aidl
package lite.bluelight.jdk.com.aidl;
// Declare any non-default types here with import statements
interface IRemoteService {
int sum(int a, int b);
}
에러는 저번과 비슷합니다..
08-11 15:16:20.838 22203-22203/lite.bluelight.jdk.com.aidlservice E/AndroidRuntime: FATAL EXCEPTION: main
Process: lite.bluelight.jdk.com.aidlservice, PID: 22203
java.lang.NullPointerException: Attempt to invoke interface method 'int lite.bluelight.jdk.com.aidl.IRemoteService.sum(int, int)' on a null object reference
아예
Log.e("DDDD", "Service has unexpectedly onServiceConnected");
와 같은 로그가 찍히지 안습니다. serviceConnection이 활성화가 되지도 않은거 같습니다..
부디.. 제가 AIDL에 관한 샘플을 만들 수 있게 도움부탁드립니다..
감사합니다..