From: gumartinm Date: Fri, 2 Mar 2012 07:09:57 +0000 (+0100) Subject: I am not able to bind with my service :( X-Git-Url: https://git.gumartinm.name/?a=commitdiff_plain;h=79a21da68452c41923b2bb188409427e5c9c3222;p=JavaForFun I am not able to bind with my service :( Dunno what is going on. No more time to keep trying. I will keep working this weekend. :( --- diff --git a/Android/Testing/Test3/src/de/android/test3/NextActivity.java b/Android/Testing/Test3/src/de/android/test3/NextActivity.java index 780b60d..c85e353 100644 --- a/Android/Testing/Test3/src/de/android/test3/NextActivity.java +++ b/Android/Testing/Test3/src/de/android/test3/NextActivity.java @@ -7,16 +7,26 @@ import java.util.concurrent.Executors; import org.apache.http.HttpVersion; import org.apache.http.params.CoreProtocolPNames; import android.app.Activity; +import android.content.ComponentName; import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.net.http.AndroidHttpClient; import android.os.Bundle; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.os.Messenger; +import android.os.RemoteException; import android.util.Log; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; +import android.widget.TextView; +import android.widget.Toast; public class NextActivity extends Activity { private static final String TAG = "NextActivity"; @@ -130,5 +140,117 @@ public class NextActivity extends Activity { } webServiceConnection = new MobieAdHttpClient(this.myCookie, url, httpClient, this, syncObject); this.exec.execute(webServiceConnection); + + + + + + + + + mCallbackText = new TextView(this); + this.doBindService(); + } + + + + + + + + + + + /** Messenger for communicating with service. */ + Messenger mService = null; + /** Flag indicating whether we have called bind on the service. */ + boolean mIsBound; + /** Some text view we are using to show state information. */ + TextView mCallbackText; + + + /** + * Target we publish for clients to send messages to IncomingHandler. + */ + final Messenger mMessenger = new Messenger(new IncomingHandler()); + + + /** + * Handler of incoming messages from service. + */ + class IncomingHandler extends Handler { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case TestService.MSG_SET_VALUE: + mCallbackText.setText("Received from service: " + msg.arg1); + break; + default: + super.handleMessage(msg); + } + } + } + + + + /** + * Class for interacting with the main interface of the service. + */ + private ServiceConnection mConnection = new ServiceConnection() { + public void onServiceConnected(ComponentName className, + IBinder service) { + // This is called when the connection with the service has been + // established, giving us the service object we can use to + // interact with the service. We are communicating with our + // service through an IDL interface, so get a client-side + // representation of that from the raw service object. + mService = new Messenger(service); + mCallbackText.setText("Attached."); + + // We want to monitor the service for as long as we are + // connected to it. + try { + Message msg = Message.obtain(null, + TestService.MSG_REGISTER_CLIENT); + msg.replyTo = mMessenger; + mService.send(msg); + + // Give it some value as an example. + msg = Message.obtain(null, + TestService.MSG_SET_VALUE, this.hashCode(), 0); + mService.send(msg); + } catch (RemoteException e) { + // In this case the service has crashed before we could even + // do anything with it; we can count on soon being + // disconnected (and then reconnected if it can be restarted) + // so there is no need to do anything here. + } + + // As part of the sample, tell the user what happened. + Toast.makeText(NextActivity.this, R.string.remote_service_started, + Toast.LENGTH_SHORT).show(); + } + + public void onServiceDisconnected(ComponentName className) { + // This is called when the connection with the service has been + // unexpectedly disconnected -- that is, its process crashed. + mService = null; + mCallbackText.setText("Disconnected."); + + // As part of the sample, tell the user what happened. + Toast.makeText(NextActivity.this, R.string.remote_service_stopped, + Toast.LENGTH_SHORT).show(); + } + }; + + void doBindService() { + // Establish a connection with the service. We use an explicit + // class name because there is no reason to be able to let other + // applications replace our component. + bindService(new Intent(NextActivity.this, + TestService.class), mConnection, Context.BIND_AUTO_CREATE); + mIsBound = true; + mCallbackText.setText("Binding."); } + } diff --git a/Android/Testing/Test3/src/de/android/test3/TestService.java b/Android/Testing/Test3/src/de/android/test3/TestService.java index b0ae31e..4e6fe55 100644 --- a/Android/Testing/Test3/src/de/android/test3/TestService.java +++ b/Android/Testing/Test3/src/de/android/test3/TestService.java @@ -12,6 +12,7 @@ import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.widget.Toast; +import android.app.Notification; public class TestService extends Service { @@ -104,6 +105,14 @@ public class TestService extends Service { */ @Override public IBinder onBind(Intent intent) { + try { + synchronized (this) { + this.wait(10000); + } + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } return mMessenger.getBinder(); } @@ -115,16 +124,16 @@ public class TestService extends Service { CharSequence text = getText(R.string.remote_service_started); // Set the icon, scrolling text and timestamp - Notification notification = new Notification(R.drawable.stat_sample, text, + Notification notification = new Notification(R.drawable.alert_dialog_icon, text, System.currentTimeMillis()); // The PendingIntent to launch our activity if the user selects this notification - PendingIntent contentIntent = PendingIntent.getActivity(this, 0, - new Intent(this, Controller.class), 0); + //PendingIntent contentIntent = PendingIntent.getActivity(this, 0, + // new Intent(this, Controller.class), 0); // Set the info for the views that show in the notification panel. - notification.setLatestEventInfo(this, getText(R.string.remote_service_label), - text, contentIntent); + //notification.setLatestEventInfo(this, getText(R.string.remote_service_label), + // text, contentIntent); // Send the notification. // We use a string id because it is a unique number. We use it later to cancel.