Tengo este servicio simple que transmite la ubicación actual del usuario. Quiero usar el mecanismo de enlace solo para controlar el ciclo de vida del servicio, pero el servicio simplemente no está comenzando.Servicio no creado (o conexión) después de bindService()
¿Qué hice mal?
public class GPSActivity extends ListActivity {
...
protected void onResume() {
super.onResume();
Log.i("Service", "Service bound");
Intent intent = new Intent(this, LocationService.class);
bindService(intent, service_connection , Context.BIND_AUTO_CREATE);
}
protected void onPause() {
if (dataUpdateReceiver!=null)
unregisterReceiver(dataUpdateReceiver);
unbindService(service_connection);
super.onPause();
}
class LocationServiceConnection implements ServiceConnection{
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("Service", "Service Connected");
}
public void onServiceDisconnected(ComponentName name) {
}
}
}
LocalBinder.java
public class LocalBinder<S> extends Binder {
private String TAG = "LocalBinder";
private WeakReference<S> mService;
public LocalBinder(S service){
mService = new WeakReference<S>(service);
}
public S getService() {
return mService.get();
}
}
LocationService.java
public class LocationService extends Service {
public void onCreate() {
initLocationListener();
Log.i("Location Service","onCreate()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("Location Service", "Received start id " + startId + ": " + intent);
return START_NOT_STICKY;
}
private final IBinder mBinder = new LocalBinder<LocationService>(this);
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
AndroidManifest.xml
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
...
<service android:name=".LocationService">
</service>
</application>
EDIT: Reparado gracias a la respuesta de NickT.
La entrada de manifiesto no tenía un filtro de intención o el nombre correcto
<service
android:enabled="true"
android:name="com.android.gps.services.LocationService">
<intent-filter>
<action android:name="com.android.gps.services.LocationService" />
</intent-filter>
</service>
y la intención que he usado para la unión fue como los que se necesita para utilizar al iniciar una actividad. la correcta es:
Intent intent = new Intent("com.android.gps.services.LocationService");
lo que hace su método 'pública IBinder onBind (intención Intención)' 'en LocationService.java' parece? – Jens
@Jens Edité la pregunta para incluir el método onBind(). – bughi
Hm. Y ni siquiera está obteniendo el 'Log.i (" Location Service "," onCreate() ");' inicie sesión en su logcat? – Jens