package com.androidcookbook.ipcservicedemo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private final static String TAG = MainActivity.class.getSimpleName();
private final static String SVC_PKG_NAME = MyRemoteService.class.getPackage().getName();
private final static String SVC_CLASS_NAME = MyRemoteServiceImpl.class.getName();
private boolean started = false;
private ServiceConnection conn;
private MyRemoteService remoteService;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView)findViewById(R.id.message);
}
public void updateServiceStatus() {
Log.d(TAG, "UpdateServiceStatus()");
}
public void startService(View v){
if (started) {
Toast.makeText(this, "Service already started",
Toast.LENGTH_SHORT).show();
} else {
Intent i = new Intent();
i.setClassName(SVC_PKG_NAME, SVC_CLASS_NAME);
startService(i);
started = true;
updateServiceStatus();
Log.d(TAG, "startService()" );
mTextView.setText("");
}
}
public void bindService(View v) {
if (conn == null) {
conn = new RemoteServiceConnection();
Intent i = new Intent();
i.setClassName(SVC_PKG_NAME, SVC_CLASS_NAME);
bindService(i, conn, Context.BIND_AUTO_CREATE);
updateServiceStatus();
Log.d(TAG, "bindService()" );
} else {
Toast.makeText(this,
"Cannot bind - service already bound", Toast.LENGTH_SHORT).show();
}
}
class RemoteServiceConnection implements ServiceConnection {
public void onServiceConnected(ComponentName className,
IBinder boundService ) {
remoteService = MyRemoteService.Stub.asInterface((IBinder)boundService);
Log.d(TAG, "onServiceConnected()" );
}
public void onServiceDisconnected(ComponentName className) {
remoteService = null;
updateServiceStatus();
Log.d(TAG, "onServiceDisconnected" );
}
};
public void invokeService(View v) {
if(conn == null) {
Toast.makeText(this,
"Cannot invoke - service not bound", Toast.LENGTH_SHORT).show();
} else {
try {
String message = remoteService.getMessage();
TextView t = (TextView)findViewById(R.id.message);
t.setText("Message: "+message);
Log.d(TAG, "invokeService()" );
} catch (RemoteException re) {
Log.e(TAG, "RemoteException" );
}
}
}
public void releaseService(View v) {
if(conn != null) {
unbindService(conn);
conn = null;
updateServiceStatus();
Log.d(TAG, "releaseService()" );
} else {
Toast.makeText(this,
"Cannot unbind - service not bound",
Toast.LENGTH_SHORT).show();
}
}
public void stopService(View v) {
if (!started) {
Toast.makeText(this, "Service not yet started",
Toast.LENGTH_SHORT).show();
} else {
Intent i = new Intent();
i.setClassName(SVC_PKG_NAME, SVC_CLASS_NAME);
stopService(i);
started = false;
updateServiceStatus();
Log.d(TAG, "stopService()" );
mTextView.setText("");
}
}
}