Mike wrote:
> Hello,
> 
> As a point of example for my problem, I wrote a single Activity which
> binds to a service and then accesses a property to display.  The
> problem is that my TestServiceConnection.onServiceConnected method is
> never called, and I don't know why.
> 
> Here is the code:
> 
> public class TestService extends Service
> {
>       private final IBinder binder = new TestServiceBinder();
> 
>       @Override
>       public IBinder onBind(Intent intent)
>       {
>               return binder;
>       }
> 
>       public String getAProperty()
>       {
>               return "Here's my property!";
>       }
> 
>       public class TestServiceBinder extends Binder
>       {
>               TestService getService()
>               {
>                       return TestService.this;
>               }
>       }
> }
> 
> public class TestServiceConnection implements ServiceConnection
> {
>       protected TestService testService = null;
> 
>       @Override
>       public void onServiceConnected(ComponentName name, IBinder service)
>       {
>               testService = 
> ((TestService.TestServiceBinder)service).getService();
>       }
> 
>       @Override
>       public void onServiceDisconnected(ComponentName name)
>       {
>               testService = null;
>       }
> }
> 
> public class RootActivity extends Activity
> {
>       private TestServiceConnection gsc = null;
> 
>       @Override
>       protected void onCreate(Bundle savedInstanceState)
>       {
>               super.onCreate(savedInstanceState);
>               setContentView(R.layout.main);
> 
>               TextView tv = (TextView)findViewById(R.id.mainText);
> 
>               gsc = new TestServiceConnection();
> 
>               Intent bindIntent = new Intent(this, TestService.class);
>               bindService(bindIntent, gsc, Context.BIND_AUTO_CREATE);
> 
>               String p = "Unable to access TestService!";
> 
>               if (gsc.testService != null)
>               {
>                       p = gsc.testService.getAProperty();
>               }
> 
>               tv.setText(p);
>       }
> }
> 
> My manifest contains the following line for the service:
> 
> <service android:enabled="true" android:name="com.wm.TestService" />
> 
> Finally, here's my main layout:
> 
> <?xml version="1.0" encoding="utf-8"?>
> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
> android"
>     android:orientation="vertical"
>     android:layout_width="fill_parent"
>     android:layout_height="fill_parent"
>     >
>       <TextView
>           android:layout_width="fill_parent"
>           android:layout_height="wrap_content"
>           android:id="@+id/mainText"/>
> </LinearLayout>

If you are determining that onServiceConnected() is not being called
because of what your TextView shows, bear in mind that bindService() is
asynchronous. AFAIK, it won't even *start* connecting until you exit
onCreate(). You are better served updating your TextView as a result of
onServiceConnected(), not at the bottom of onCreate().

If you are determining that onServiceConnected() is not being called
because of a breakpoint, or logging statements not shown above, perhaps
your service is not registered in the manifest or something. You should
see warnings or errors in logcat (via adb logcat, DDMS, or the DDMS
perspective in Eclipse).

-- 
Mark Murphy (a Commons Guy)
http://commonsware.com | http://twitter.com/commonsguy

_Beginning Android_ from Apress Now Available!

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to