I am not able to bind with my service :(
authorgumartinm <gu.martinm@gmail.com>
Fri, 2 Mar 2012 07:09:57 +0000 (08:09 +0100)
committergumartinm <gu.martinm@gmail.com>
Fri, 2 Mar 2012 07:09:57 +0000 (08:09 +0100)
Dunno what is going on. No more time to keep trying.
I will keep working this weekend. :(

Android/Testing/Test3/src/de/android/test3/NextActivity.java
Android/Testing/Test3/src/de/android/test3/TestService.java

index 780b60d..c85e353 100644 (file)
@@ -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.");
     }
+
 }
index b0ae31e..4e6fe55 100644 (file)
@@ -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.